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 83e26df0c..c45c85c27 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 @@ -34,10 +34,10 @@ public class InjectionMoldingRequestReader : IReader private readonly ILogger _logger; private readonly IOptions _options; private readonly IHttpClientFactory _httpClientFactory; - + public InjectionMoldingRequestReader( IInjectionIssueRequestAppService injectionRequest - + , ILogger logger , IOptions options , IHttpClientFactory httpClientFactory @@ -47,21 +47,21 @@ public class InjectionMoldingRequestReader : IReader ) { _injectionRequest = injectionRequest; - + _logger = logger; _options = options; _httpClientFactory = httpClientFactory; - _itemService=itemService; + _itemService = itemService; _locService = locService; } -/// -/// 读取注塑叫料任务 -/// -/// + /// + /// 读取注塑叫料任务 + /// + /// public virtual async Task> ReadAsync() - { + { try { #if DEBUG @@ -69,130 +69,131 @@ public class InjectionMoldingRequestReader : IReader _options.Value.AutoRemote.Interval = 2; #endif - // var sleepTime = (_options.Value.AutoRemote.TimeCycle*60/ _options.Value.AutoRemote.Interval)-10; + // var sleepTime = (_options.Value.AutoRemote.TimeCycle*60/ _options.Value.AutoRemote.Interval)-10; var invterval = _options.Value.AutoRemote.Interval; - var successTime = 0; - var guid = DateTime.Now.ToString("yyyyMMddHHmmssfff"); - for (int i = 0; i (); - } - 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(); + 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(); + for (int i = 1; i <= invterval; i++) + { foreach (var itm in ids)//遍历区域查找所有货物 { var idsList = await client.GetCargoStaticAsync(itm).ConfigureAwait(false); - camralist.AddRange(idsList); + //flag 1-有货 0-空闲 + camralist.AddRange(idsList.Where(r => r.Flag == 0)); } - successTime++; - sw.Stop(); - _logger.LogInformation($"读取标识{guid}读取成功次数{successTime},耗时 {sw.ElapsedMilliseconds}毫秒"); - Thread.Sleep(1000); - - + _logger.LogInformation($"读取标识{guid}读取成功次数{i},耗时 {sw.ElapsedMilliseconds}毫秒"); + } + 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(); + //如果有货位空闲 + if (list.Count>0) + { + + sw = Stopwatch.StartNew(); - if (successTime == invterval) + _logger.LogInformation($"开始标识{guid}同步WMS开始"); + List inputdetail = new List(); + foreach (var item in list.Select(r=>r.Key).ToList()) { - sw = Stopwatch.StartNew(); - - _logger.LogInformation($"开始标识{guid}同步WMS开始"); - List inputdetail = new List(); - foreach (var item in camralist) - { - UnCompletedRequestDto jobrequestinput = new UnCompletedRequestDto(); - jobrequestinput.ItemCode = item.PartCode; - jobrequestinput.LocCode = item.AreaID.ToString(); - jobrequestinput.PositionCode = item.CargoID.ToString(); - inputdetail.Add(jobrequestinput); - } + UnCompletedRequestDto jobrequestinput = new UnCompletedRequestDto(); + jobrequestinput.ItemCode = item.PartCode; + jobrequestinput.LocCode = item.AreaID.ToString(); + jobrequestinput.PositionCode = item.CargoID.ToString(); + inputdetail.Add(jobrequestinput); + } - var uncompletelist = await _injectionRequest.GetUnCompletedRequestAsync(inputdetail).ConfigureAwait(false);//将所有库位零件信息查找未完成记录 + var uncompletelist = await _injectionRequest.Getlist(inputdetail).ConfigureAwait(false);//将所有库位零件信息查找未完成记录 - var query = from itm in camralist - join itm1 in uncompletelist on new { locCode = itm.AreaID.ToString(), itmCode = itm.PartCode, PositionCode = itm.CargoID.ToString() } - equals new { locCode = itm1.LocCode, itmCode = itm1.ItemCode, PositionCode = itm1.PositionCode } into temp - from tm in temp.DefaultIfEmpty() - where tm == null - select itm; - var injectionList = query.ToList();//已经完成的记录 + var query = from itm in list.Select(r => r.Key).ToList() + join itm1 in uncompletelist on new { locCode = itm.AreaID.ToString(), itmCode = itm.PartCode, PositionCode = itm.CargoID.ToString() } + equals new { locCode = itm1.LocCode, itmCode = itm1.ItemCode, PositionCode = itm1.PositionCode } into temp + from tm in temp.DefaultIfEmpty() + where tm == null + select itm; + var injectionList = query.ToList();//已经完成的记录 - foreach (var inject in injectionList) + foreach (var inject in injectionList) + { + List cameraList = new List(); + + InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput(); + input.Worker = "Vision"; + input.IssueRequestType = EnumIssueRequestType.Vision; + input.AutoSubmit = true; + input.ActiveDate = DateTime.Now; + input.UseOnTheWayLocation = false; + input.Remark = "视觉叫料"; + List injectionRequestDetails = new List(); + //foreach (var job in cameraList) + //{ + var detailInput = new InjectionIssueRequestDetailInput() { - List cameraList = new List(); - - InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput(); - input.Worker = "Vision"; - input.IssueRequestType = EnumIssueRequestType.Vision; - input.AutoSubmit = true; - input.ActiveDate = DateTime.Now; - input.UseOnTheWayLocation = false; - input.Remark = "视觉叫料"; - List injectionRequestDetails = new List(); - //foreach (var job in cameraList) - //{ - var detailInput = new InjectionIssueRequestDetailInput() - { - ItemCode = inject.PartCode, - ToLocationCode = inject.AreaID.ToString(), - PositionCode = inject.CargoID, - Qty = 1, - RecommendType = EnumRecommendType.RAW, - IssuedQty = 0, - ReceivedQty = 0, - Status = EnumStatus.Open, - RequestStatus = EnumRequestStatus.New, - BoxQty = 1 - }; - // 添加注塑叫料明细任务数据 - injectionRequestDetails.Add(detailInput); - //} - input.Details.AddRange(injectionRequestDetails); - // 通过 BindAsync 方法对零件仓库进行赋值 - var errors = await BindAsync(input.Details).ConfigureAwait(false); - if (errors.Count > 0) + ItemCode = inject.PartCode, + ToLocationCode = inject.AreaID.ToString(), + PositionCode = inject.CargoID, + Qty = 1, + RecommendType = EnumRecommendType.RAW, + IssuedQty = 0, + ReceivedQty = 0, + Status = EnumStatus.Open, + RequestStatus = EnumRequestStatus.New, + BoxQty = 1 + }; + // 添加注塑叫料明细任务数据 + injectionRequestDetails.Add(detailInput); + //} + input.Details.AddRange(injectionRequestDetails); + // 通过 BindAsync 方法对零件仓库进行赋值 + var errors = await BindAsync(input.Details).ConfigureAwait(false); + if (errors.Count > 0) + { + // 记录错误日志并返回空列表 + foreach (var error in errors) { - // 记录错误日志并返回空列表 - foreach (var error in errors) - { - _logger.LogInformation(error); - } - return new List(); + _logger.LogInformation(error); } - // 创建新的注塑请求并将数据写入数据库 - await _injectionRequest.CreateAsync(input).ConfigureAwait(false); - + return new List(); } - _logger.LogInformation($"标识{guid}同步WMS结束,耗时{sw.ElapsedMilliseconds }毫秒"); - } - else - { - Thread.Sleep(1000); + // 创建新的注塑请求并将数据写入数据库 + await _injectionRequest.CreateAsync(input).ConfigureAwait(false); + } - - + _logger.LogInformation($"标识{guid}同步WMS结束,耗时{sw.ElapsedMilliseconds}毫秒"); + } + else + { + Thread.Sleep(1000); } + //Client client = new Client(_options.Value.AutoRemote.IpAddress, _httpClientFactory.CreateClient());//调用客户记录 //var flag= await client.GetMacStaticAsync().ConfigureAwait(false); @@ -219,13 +220,13 @@ public class InjectionMoldingRequestReader : IReader //camralist = camralist.Where(p=>p.Flag==0).ToList(); - + //} } // 捕获特定异常并记录日志 - + catch (Exception ex) { _logger.LogInformation(ex.Message); @@ -262,7 +263,7 @@ public class InjectionMoldingRequestReader : IReader if (loc == null) { errors.Add($"编号:{request.ToLocationCode}库位表中没找到!"); } else { - + // 更新请求中的库位相关信息 request.ToLocationCode = loc.Code; request.ToLocationGroup = loc.LocationGroupCode; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs index fbf8d2754..ceb7e125b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs @@ -1,6 +1,8 @@ +using Volo.Abp.Application.Dtos; + namespace Win_in.Sfs.Wms.Store.Application.Contracts; -public class UnCompletedRequestDto +public class UnCompletedRequestDto: EntityDto { public string ItemCode { get; set; } public string LocCode { get; set; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs index 5f93fa667..e7cee5fc3 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs @@ -13,5 +13,6 @@ public interface IInjectionIssueRequestAppService Task CreateAndHandleAsync(InjectionIssueRequestEditInput input); Task UpdateStatusCompletedAsync(string number); Task IsHasNewJobAsync(string requestNumber, List jobNumber); - Task> GetUnCompletedRequestAsync(List p_list); + Task> GetListForSJ(List p_list); + Task> Getlist(List pList); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs index 84b15b9be..23e763536 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs @@ -401,8 +401,8 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase /// - [HttpPost("get-uncompleted-request")] - public async Task> GetUnCompletedRequestAsync(List pList) + [HttpPost("sj")] + public async Task> GetListForSJ(List pList) { var returnList = new List(); //枚举类型查不到改成SQL查询 @@ -427,6 +427,38 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase + /// 获取已完成的叫料单数量 + /// + /// + [HttpPost("get")] + public async Task> Getlist(List pList) + { + var returnList = new List(); + //枚举类型查不到改成SQL查询 + var list = await _repository.GetListAsync(p => + p.RequestStatus != EnumRequestStatus.Completed && p.IssueRequestType == EnumIssueRequestType.Vision) + .ConfigureAwait(false); + foreach (var itm in list) + { + var query = from detail in itm.Details + join citm in pList on new + { + detail.ItemCode, + locCode = detail.ToLocationCode, + areaCode = detail.PositionCode + } equals + new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode } + select new UnCompletedRequestDto + { + ItemCode = detail.ItemCode, + LocCode = detail.ToLocationCode, + PositionCode = detail.PositionCode + }; + returnList.AddRange(query.ToList()); + } + return returnList; + } #endregion }