diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Client/WebApi.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Client/WebApi.cs index 028ad78ac..5b264c20c 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Client/WebApi.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Client/WebApi.cs @@ -535,6 +535,44 @@ namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming } + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ResponCargoItem1 + { + + /// + /// 读取次数 + /// + [Newtonsoft.Json.JsonProperty("number", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Number { get; set; } + + /// + /// 区域ID + /// + [Newtonsoft.Json.JsonProperty("areaID", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string AreaID { get; set; } + + /// + /// 货位号 + /// + [Newtonsoft.Json.JsonProperty("cargoID", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string CargoID { get; set; } + + /// + /// 零件号 + /// + [Newtonsoft.Json.JsonProperty("partCode", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string PartCode { get; set; } + + /// + /// 货位状态 + /// + [Newtonsoft.Json.JsonProperty("flag", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int Flag { get; set; } + + } + + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.7.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")] diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs index c45c85c27..47335b81c 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs @@ -23,6 +23,9 @@ using System.Net.NetworkInformation; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using System.Threading; using System.Diagnostics; +using System.Reflection; +using Microsoft.Extensions.Primitives; +using Win_in.Sfs.Shared.Application; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming; public class InjectionMoldingRequestReader : IReader @@ -67,55 +70,89 @@ public class InjectionMoldingRequestReader : IReader #if DEBUG _options.Value.AutoRemote.TimeCycle = 1; _options.Value.AutoRemote.Interval = 2; - #endif // var sleepTime = (_options.Value.AutoRemote.TimeCycle*60/ _options.Value.AutoRemote.Interval)-10; var invterval = _options.Value.AutoRemote.Interval; - var guid = DateTime.Now.ToString("yyyyMMddHHmmssfff"); - - - Stopwatch sw = Stopwatch.StartNew(); - Client client = new Client(_options.Value.AutoRemote.IpAddress, _httpClientFactory.CreateClient());//调用客户记录 - var flag = await client.GetMacStaticAsync().ConfigureAwait(false); + + if (flag != 1) { // 记录错误日志并返回空列表 _logger.LogInformation($"读取到摄像头信息为不可用{DateTime.Now},请检查摄像头"); + return new List(); } if (string.IsNullOrEmpty(_options.Value.AutoRemote.AreaIDs)) { _logger.LogInformation($"没有设置指定区域AutoRemote->AreaIDs"); + + return new List(); } var ids = _options.Value.AutoRemote.AreaIDs.Split(","); List camralist = new List(); + List camralist1 = new List(); for (int i = 1; i <= invterval; i++) { foreach (var itm in ids)//遍历区域查找所有货物 { var idsList = await client.GetCargoStaticAsync(itm).ConfigureAwait(false); + + + Thread.Sleep(1000);//设备读取50ms延时,设置延时时间为1000ms保证读取更新到信息 //flag 1-有货 0-空闲 + foreach (var respon in idsList.Where(r => r.Flag == 0)) + { + var response = new ResponCargoItem1(); + response.FromObject(respon); + response.Number = $"第{i.ToString()}次读取"; + camralist1.Add(response); + } + camralist.AddRange(idsList.Where(r => r.Flag == 0)); } + _logger.LogInformation($"读取标识{guid}读取成功次数{i},耗时 {sw.ElapsedMilliseconds}毫秒"); } + _logger.LogInformation($"标识{guid}读取{invterval}次接口表:{System.Text.Json.JsonSerializer.Serialize(camralist1)}"); + + + _logger.LogInformation(MakeGrid($"标识{guid}读取{invterval}次接口表",camralist1)); + + + + + + + + + + + sw.Stop(); - Thread.Sleep(1000); + //按区域、货位号、零件、标志 var group= camralist.GroupBy(r => new { r.AreaID, r.CargoID, r.PartCode, r.Flag }); //获取和次数相等的空闲数据 var list = group.Where(r => r.Count() == invterval).ToList(); + + var errorlist= group.Where(r => r.Count() != invterval).ToList(); + + if (errorlist.Count > 0) + { + _logger.LogInformation($"标识{guid}不能同步内容JSON:{System.Text.Json.JsonSerializer.Serialize(errorlist.Select(r => r.Key).ToList())}"); + _logger.LogInformation(MakeGrid($"标识{guid}不能同步内容", errorlist)); + } + //如果有货位空闲 if (list.Count>0) { - - sw = Stopwatch.StartNew(); + sw = Stopwatch.StartNew(); _logger.LogInformation($"开始标识{guid}同步WMS开始"); List inputdetail = new List(); foreach (var item in list.Select(r=>r.Key).ToList()) @@ -137,11 +174,15 @@ public class InjectionMoldingRequestReader : IReader select itm; var injectionList = query.ToList();//已经完成的记录 + _logger.LogInformation($"标识{guid}同步WMS内容:{System.Text.Json.JsonSerializer.Serialize(injectionList)}"); + + _logger.LogInformation(MakeGrid($"{guid}同步WMS内容", injectionList)); + + foreach (var inject in injectionList) { List cameraList = new List(); - InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput(); input.Worker = "Vision"; input.IssueRequestType = EnumIssueRequestType.Vision; @@ -249,7 +290,7 @@ public class InjectionMoldingRequestReader : IReader { // 获取对应零件信息 var itm = await _itemService.GetByCodeAsync(request.ItemCode).ConfigureAwait(false); - if (itm == null) { errors.Add($"编号:{request.ItemCode}零件表中没找到!"); } + if (itm == null) { errors.Add($"编号:{request.ItemCode}零件表中没找到,请维护零件表!"); } else { // 更新请求中的零件描述和名称 @@ -260,7 +301,7 @@ public class InjectionMoldingRequestReader : IReader } // 获取对应库位信息 var loc = await _locService.GetByCodeAsync(request.ToLocationCode).ConfigureAwait(false); - if (loc == null) { errors.Add($"编号:{request.ToLocationCode}库位表中没找到!"); } + if (loc == null) { errors.Add($"编号:{request.ToLocationCode}库位表中没找到,请维护库位表!"); } else { @@ -357,14 +398,79 @@ public class InjectionMoldingRequestReader : IReader public decimal Qty { get; set; } } + private string MakeGrid(string header,List p_list) where T : class + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine(header); + int rows = p_list.Count; + var first = p_list.First(); + var properties = first.GetType().GetProperties(); + int columns = properties.Length; + var columNames = first.GetType().GetProperties().ToList().Select(p => p.Name).ToList(); + int cellWidth = 20; // 每个单元格的宽度 + List contents = new List(); + for (int i = 0; i < rows; i++) + { + var row = p_list[i]; + foreach (PropertyInfo property in properties) + { + // 使用反射获取属性值 + contents.Add(property.GetValue(row).ToString()); + } + } + + // 输出列头 + for (int j = 0; j < columns; j++) + { + sb.Append("|"); + sb.Append(FormatCell(columNames[j], cellWidth)); + } + sb.Append("|"); + sb.AppendLine(); + + // 输出列头分隔线 + for (int k = 0; k < columns * (cellWidth + 1) + 1; k++) + { + sb.Append("-"); + } + sb.AppendLine(); + + // 输出网格内容 + for (int i = 0; i < rows; i++) + { + for (int j = 0; j < columns; j++) + { + sb.Append("|"); + sb.Append(FormatCell(contents[i * columns + j], cellWidth)); + } + sb.Append("|"); + sb.AppendLine(); + } + return sb.ToString(); + + } + + + + + + + + + + + private string FormatCell(object value, int width) + { + return value.ToString().PadLeft(width); + } } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.csproj b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.csproj index 58f34a399..8006c4dfa 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.csproj +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.csproj @@ -12,6 +12,7 @@ + diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/BaseDatas/SplitPackingRecController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/BaseDatas/SplitPackingRecController.cs index d02f1f80f..ac4e65b16 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/BaseDatas/SplitPackingRecController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/BaseDatas/SplitPackingRecController.cs @@ -51,4 +51,16 @@ public class SplitPackingRecController : AbpController { return await _splitPackingRecApp.GetSplitPackingCode(toPackingCode).ConfigureAwait(false); } + + /// + /// 根据to箱码取所有具有相同箱码的拆箱记录 + /// + /// + /// + [HttpGet("get-same-ponumber-list-by-topackingcode")] + public async Task> GetSamePoNumberListByToPackingCode(string toPackingCode) + { + return await _splitPackingRecApp.GetSamePoNumberListByToPackingCode(toPackingCode).ConfigureAwait(false); + } + } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/ISplitPackingRecAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/ISplitPackingRecAppService.cs index 2fe7efc27..6a283da3b 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/ISplitPackingRecAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/SplitPackings/ISplitPackingRecAppService.cs @@ -29,4 +29,11 @@ public interface ISplitPackingRecAppService Task GetTopPackingCode(string toPackingCode); Task GetSplitPackingCode(string toPackingCode); Task> GetFirstOrDefaultPackingCode(List toPackingCodeList); + + /// + /// 根据to箱码取所有具有相同箱码的拆箱记录 + /// + /// + /// + Task> GetSamePoNumberListByToPackingCode(string toPackingCode); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLines/ProductionLineAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLines/ProductionLineAppService.cs index 504aef6c8..b51e7924e 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLines/ProductionLineAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLines/ProductionLineAppService.cs @@ -64,7 +64,7 @@ public class ProductionLineAppService var entity = await _repository.FirstOrDefaultAsync(p => p.LocationCode == locationCode).ConfigureAwait(false); if (entity == null) { - throw new UserFriendlyException($"【{locationCode}】库位不存在"); + throw new UserFriendlyException($"生产线表中【{locationCode}】库位不存在"); } return ObjectMapper.Map(entity); diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SplitPackings/SplitPackingRecAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SplitPackings/SplitPackingRecAppService.cs index d6545a3e2..a9eb98bd0 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SplitPackings/SplitPackingRecAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/SplitPackings/SplitPackingRecAppService.cs @@ -6,6 +6,8 @@ using Volo.Abp.Caching; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Basedata.Domain.Shared; +using System.Linq; +using Volo.Abp; namespace Win_in.Sfs.Basedata.Application; @@ -101,5 +103,29 @@ public class SplitPackingRecAppService : return ret; } + /// + /// 根据to箱码取所有具有相同箱码的拆箱记录 + /// + /// + /// + [HttpGet("get-same-ponumber-list-by-topackingcode")] + public async Task> GetSamePoNumberListByToPackingCode(string toPackingCode) + { + List ret = new List(); + var entity = await _splitPackingRecManager.GetTopPackingCode(toPackingCode).ConfigureAwait(false); + if (entity == null) + { + return ret; + } + if (entity.PurchaseInfo_PoNumber.IsNullOrEmpty2()) + { + throw new UserFriendlyException($"PurchaseInfo_PoNumber不能为空,to箱码:{toPackingCode}"); + } + var lst = await Repository.GetListAsync(itm => itm.PurchaseInfo_PoNumber == entity.PurchaseInfo_PoNumber).ConfigureAwait(false); + + ret = ObjectMapper.Map, List>(lst); + return ret; + } + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestImportInput.cs index 27fb71914..ae16fb995 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestImportInput.cs @@ -1,50 +1,34 @@ using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Application.Contracts; +using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; namespace Win_in.Sfs.Wms.Store.Application.Contracts; -[Display(Name = "叫料申请导入")] +[Display(Name = "装配叫料申请导入")] public class AssembleIssueRequestImportInput : SfsStoreImportInputBase { - /// - /// 叫料类型 - /// - [Display(Name = "叫料类型")] - public EnumIssueRequestType IssueRequestType { get; set; } + #region 目标库位信息 /// /// 物品代码 /// [Display(Name = "物品代码")] - [Required] public string ItemCode { get; set; } /// - /// 目标库位 - /// - [Display(Name = "目标库位")] - [Required] - public string ToLocationCode { get; set; } - - /// - /// 来源库区 + /// 需求数量 /// - [Display(Name = "调出库区")] - [Required] - public string FromLocationArea { get; set; } - - /// - /// 数量 - /// - [Display(Name = "数量")] - [Required(ErrorMessage = "{0}是必填项")] + [Display(Name = "需求数量")] public decimal Qty { get; set; } /// - /// 备注 + /// 目标库位 /// - [Display(Name = "备注")] - public string Remark { get; set; } + [Display(Name = "目标库位")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ToLocationCode { get; set; } + + #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs index e96fc3f72..bd527e15c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Application.Contracts; +using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; @@ -8,43 +9,26 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts; [Display(Name = "喷涂叫料申请导入")] public class CoatingIssueRequestImportInput : SfsStoreImportInputBase { - /// - /// 叫料类型 - /// - [Display(Name = "叫料类型")] - public EnumIssueRequestType IssueRequestType { get; set; } + #region 目标库位信息 /// /// 物品代码 /// [Display(Name = "物品代码")] - [Required] public string ItemCode { get; set; } /// - /// 目标库位 - /// - [Display(Name = "目标库位")] - [Required] - public string ToLocationCode { get; set; } - - /// - /// 来源库区 + /// 需求数量 /// - [Display(Name = "调出库区")] - [Required] - public string FromLocationArea { get; set; } - - /// - /// 数量 - /// - [Display(Name = "数量")] - [Required(ErrorMessage = "{0}是必填项")] + [Display(Name = "需求数量")] public decimal Qty { get; set; } /// - /// 备注 + /// 目标库位 /// - [Display(Name = "备注")] - public string Remark { get; set; } + [Display(Name = "目标库位")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ToLocationCode { get; set; } + + #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestImportInput.cs index f1258f55d..4a205e217 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestImportInput.cs @@ -1,50 +1,34 @@ using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Application.Contracts; +using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; namespace Win_in.Sfs.Wms.Store.Application.Contracts; -[Display(Name = "叫料申请")] +[Display(Name = "注塑叫料申请导入")] public class InjectionIssueRequestImportInput : SfsStoreImportInputBase { - /// - /// 叫料类型 - /// - [Display(Name = "叫料类型")] - public EnumIssueRequestType IssueRequestType { get; set; } + #region 目标库位信息 /// /// 物品代码 /// [Display(Name = "物品代码")] - [Required] public string ItemCode { get; set; } /// - /// 目标库位 - /// - [Display(Name = "目标库位")] - [Required] - public string ToLocationCode { get; set; } - - /// - /// 来源库区 + /// 需求数量 /// - [Display(Name = "调出库区")] - [Required] - public string FromLocationArea { get; set; } - - /// - /// 数量 - /// - [Display(Name = "数量")] - [Required(ErrorMessage = "{0}是必填项")] + [Display(Name = "需求数量")] public decimal Qty { get; set; } /// - /// 备注 + /// 目标库位 /// - [Display(Name = "备注")] - public string Remark { get; set; } + [Display(Name = "目标库位")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ToLocationCode { get; set; } + + #endregion } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/Inputs/KittingIssueRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/Inputs/KittingIssueRequestImportInput.cs index 18d0f0447..fac195b93 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/Inputs/KittingIssueRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/KittingIssueRequests/Inputs/KittingIssueRequestImportInput.cs @@ -7,22 +7,14 @@ using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; namespace Win_in.Sfs.Wms.Store.Application.Contracts; -[Display(Name = "Kitting叫料申请")] +[Display(Name = "Kitting叫料申请导入")] public class KittingIssueRequestImportInput : SfsStoreImportInputBase { - [Display(Name = "序号")] - [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - [Key] - public string Number { get; set; } - - #region 目标库位信息 - /// - /// 目标库位 + /// 物品代码 /// - [Display(Name = "目标库位")] - [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string ToLocationCode { get; set; } + [Display(Name = "物品代码")] + public string ItemCode { get; set; } /// /// 需求数量 @@ -31,10 +23,9 @@ public class KittingIssueRequestImportInput : SfsStoreImportInputBase public decimal Qty { get; set; } /// - /// 物品代码 + /// 目标库位 /// - [Display(Name = "物品代码")] - public string ItemCode { get; set; } - - #endregion + [Display(Name = "目标库位")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ToLocationCode { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/SparePartIssueRequests/Inputs/SparePartIssueRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/SparePartIssueRequests/Inputs/SparePartIssueRequestImportInput.cs index 032cd4ac7..cc98760a6 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/SparePartIssueRequests/Inputs/SparePartIssueRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/SparePartIssueRequests/Inputs/SparePartIssueRequestImportInput.cs @@ -1,50 +1,30 @@ using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Application.Contracts; +using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; namespace Win_in.Sfs.Wms.Store.Application.Contracts; -[Display(Name = "叫料申请")] +[Display(Name = "备料叫料申请导入")] public class SparePartIssueRequestImportInput : SfsStoreImportInputBase { - /// - /// 叫料类型 - /// - [Display(Name = "叫料类型")] - public EnumIssueRequestType IssueRequestType { get; set; } - /// /// 物品代码 /// [Display(Name = "物品代码")] - [Required] public string ItemCode { get; set; } /// - /// 目标库位 + /// 需求数量 /// - [Display(Name = "目标库位")] - [Required] - public string ToLocationCode { get; set; } - - /// - /// 来源库区 - /// - [Display(Name = "调出库区")] - [Required] - public string FromLocationArea { get; set; } - - /// - /// 数量 - /// - [Display(Name = "数量")] - [Required(ErrorMessage = "{0}是必填项")] + [Display(Name = "需求数量")] public decimal Qty { get; set; } /// - /// 备注 + /// 目标库位 /// - [Display(Name = "备注")] - public string Remark { get; set; } + [Display(Name = "目标库位")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ToLocationCode { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestAppService.cs index f146614c1..9a9df2444 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestAppService.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.Domain.Entities; using Volo.Abp.ObjectMapping; using Volo.Abp.Uow; using Win_in.Sfs.Basedata.Application.Contracts; @@ -69,13 +70,22 @@ public class PurchaseReceiptRequestAppService : public virtual async Task GetDetailByItemAndPackingAsync(string itemCode, string packingCode) { - var entity = (await _repository.GetListAsync(p => p.Details.Any(y => y.ItemCode == itemCode && y.PackingCode == packingCode), true).ConfigureAwait(false)).FirstOrDefault(); + var entitysList = (await _repository.GetListAsync(p => p.Details.Any(y => y.ItemCode == itemCode && y.PackingCode == packingCode), true).ConfigureAwait(false)); - var detail = entity.Details.FirstOrDefault(y => y.ItemCode == itemCode && y.PackingCode == packingCode); + if (entitysList != null && entitysList.Any()) + { + var entity = entitysList.FirstOrDefault(); - var dto = ObjectMapper.Map(detail); + var detail = entity.Details.FirstOrDefault(y => y.ItemCode == itemCode && y.PackingCode == packingCode); - return dto; + var dto = ObjectMapper.Map(detail); + + return dto; + } + else + { + throw new UserFriendlyException("未在到货通知中找到该箱码信息"); + } } #endregion