diff --git a/SlnMesnac.Business/Airport/AirPortBusiness.cs b/SlnMesnac.Business/Airport/AirPortBusiness.cs index a11d4ef..8ece08c 100644 --- a/SlnMesnac.Business/Airport/AirPortBusiness.cs +++ b/SlnMesnac.Business/Airport/AirPortBusiness.cs @@ -9,19 +9,8 @@ using System.Threading.Tasks; namespace SlnMesnac.Business.Airport { - public class AirPortBusiness : BackgroundService + public class AirPortBusiness { - private readonly IAirportTaskService _airportTaskService; - public AirPortBusiness(IAirportTaskService airportTaskService) - { - _airportTaskService = airportTaskService; - } - - protected async override Task ExecuteAsync(CancellationToken stoppingToken) - { - - return; - } } } diff --git a/SlnMesnac.Business/base/BaseStateRefreshBusiness.cs b/SlnMesnac.Business/base/BaseStateRefreshBusiness.cs new file mode 100644 index 0000000..7ae07dc --- /dev/null +++ b/SlnMesnac.Business/base/BaseStateRefreshBusiness.cs @@ -0,0 +1,60 @@ +锘縰sing Microsoft.Extensions.Logging; +using SlnMesnac.Model.AirportApiEntity; +using SlnMesnac.Repository.service; +using SlnMesnac.TouchSocket; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SlnMesnac.Business.@base +{ + public class BaseStateRefreshBusiness + { + private IAGVStateService _AGVStateService; + private IManipulatorStateService _ManipulatorStateService; + private ILogger _logger; + private static BaseStateRefreshBusiness instance; + public BaseStateRefreshBusiness(ILogger logger, IAGVStateService agvService, IManipulatorStateService manipulatorStateService) + { + _logger = logger; + _AGVStateService = agvService; + _ManipulatorStateService = manipulatorStateService; + } + public static BaseStateRefreshBusiness GetInstance(ILogger logger, IAGVStateService agvService, IManipulatorStateService manipulatorStateService) + { + if (instance == null) + { + instance = new BaseStateRefreshBusiness(logger, agvService, manipulatorStateService); + } + return instance; + } + + public bool UpdateAGVStateByResposne(AGVStateRequestEntity request) + { + try + { + var response = AirPorthttpClient.AGVStateRequest(request); + _AGVStateService.UpdateOrAddByResponse(response); + } + catch (Exception e) + { + _logger.LogError("Error:" + e); + } + return true; + } + + public bool UpdateManipulatorStateByResposne(ManipulatorStateRequestEntity request) + { + try + { + var response = AirPorthttpClient.ManipulatorStateRequest(request); + _ManipulatorStateService.UpdateOrAddByResponse(response); + } + catch (Exception e) + { + _logger.LogError("Error:" + e); + } + return true; + } + } +} diff --git a/SlnMesnac.Repository/service/IAGVStateService.cs b/SlnMesnac.Repository/service/IAGVStateService.cs index 446a2ba..7b81926 100644 --- a/SlnMesnac.Repository/service/IAGVStateService.cs +++ b/SlnMesnac.Repository/service/IAGVStateService.cs @@ -1,3 +1,4 @@ +using SlnMesnac.Model.AirportApiEntity; using SlnMesnac.Model.domain; using SlnMesnac.Repository.service.@base; using System; @@ -22,5 +23,18 @@ namespace SlnMesnac.Repository.service /// Task UpdateAsync(AGVState record); + /// + /// 查询所有AGV状态 + /// + /// + List GetAllAGVState(); + + /// + /// 根据响应数据插入或更新数据 + /// + /// + /// + Task UpdateOrAddByResponse(AGVStateResponseEntity response); + } } \ No newline at end of file diff --git a/SlnMesnac.Repository/service/IManipulatorStateService.cs b/SlnMesnac.Repository/service/IManipulatorStateService.cs new file mode 100644 index 0000000..8b5060d --- /dev/null +++ b/SlnMesnac.Repository/service/IManipulatorStateService.cs @@ -0,0 +1,39 @@ +锘縰sing SlnMesnac.Model.AirportApiEntity; +using SlnMesnac.Model.domain; +using SlnMesnac.Repository.service.@base; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace SlnMesnac.Repository.service +{ + public interface IManipulatorStateService : IBaseService + { + /// + /// 鏌ヨ绌洪棽鐨勬満姊拌噦淇℃伅 + /// + /// + List GetFreeManipulatorState(); + + /// + /// 鏌ヨ鎵鏈夋満姊拌噦淇℃伅 + /// + /// + List GetAllManipulatorState(); + + /// + /// 鏇存柊鏈烘鑷傝澶囩姸鎬佷俊鎭 + /// + /// + /// + Task UpdateAsync(ManipulatorState record); + + /// + /// 鏇存柊鎴栨彃鍏ユ満姊拌噦璁惧鐘舵佷俊鎭 + /// + /// + /// + Task UpdateOrAddByResponse(ManipulatorStateResponseEntity response); + } +} diff --git a/SlnMesnac.Repository/service/Impl/AGVStateServiceImpl.cs b/SlnMesnac.Repository/service/Impl/AGVStateServiceImpl.cs index aeadc34..6f4b5f0 100644 --- a/SlnMesnac.Repository/service/Impl/AGVStateServiceImpl.cs +++ b/SlnMesnac.Repository/service/Impl/AGVStateServiceImpl.cs @@ -1,9 +1,11 @@ using Microsoft.Extensions.Logging; using SlnMesnac.Common; +using SlnMesnac.Model.AirportApiEntity; using SlnMesnac.Model.domain; using SlnMesnac.Repository.service.@base; using System; using System.Collections.Generic; +using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; @@ -28,7 +30,21 @@ namespace SlnMesnac.Repository.service.Impl } catch (Exception ex) { - _logger.LogError($"通过物料类型获取物料信息异常:{ex.Message}"); + _logger.LogError($"获取空闲AGV信息异常:{ex.Message}"); + } + return agvStateInfoList; + } + + public List GetAllAGVState() + { + List agvStateInfoList = null; + try + { + agvStateInfoList = base._rep.GetList(); + } + catch (Exception ex) + { + _logger.LogError($"获取所有AGV信息异常:{ex.Message}"); } return agvStateInfoList; } @@ -38,5 +54,37 @@ namespace SlnMesnac.Repository.service.Impl bool result = await _rep.UpdateAsync(record); return result; } + + public async Task UpdateOrAddByResponse(AGVStateResponseEntity response) + { + AGVState record = new AGVState() + { + agvno = response.AGVNo, + agvalarmstate = response.AGVAlarmState, + agvtype = response.AGVType, + agvworkstate = response.AGVWorkState, + refreshtime = DateTime.Now, + taskno = response.TaskNo, + }; + bool result = false; + try + { + var list = GetAllAGVState(); + if (list.Where(x => x.agvno == response.AGVNo).Count() == 0) + { + result = _rep.Insert(record); + } + else + { + record.id = list.Where(x => x.agvno == response.AGVNo).FirstOrDefault().id; + result = await _rep.UpdateAsync(record); + } + } + catch (Exception ex) + { + _logger.LogError($"机械臂状态信息更新异常:{ex.Message}"); + } + return result; + } } } \ No newline at end of file diff --git a/SlnMesnac.Repository/service/Impl/ManipulatorStateServiceImpl.cs b/SlnMesnac.Repository/service/Impl/ManipulatorStateServiceImpl.cs new file mode 100644 index 0000000..56f6b3d --- /dev/null +++ b/SlnMesnac.Repository/service/Impl/ManipulatorStateServiceImpl.cs @@ -0,0 +1,92 @@ +锘縰sing Microsoft.Extensions.Logging; +using SlnMesnac.Common; +using SlnMesnac.Model.AirportApiEntity; +using SlnMesnac.Model.domain; +using SlnMesnac.Repository.service.@base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace SlnMesnac.Repository.service.Impl +{ + public class ManipulatorStateServiceImpl : BaseServiceImpl, IManipulatorStateService + { + private ILogger _logger; + + + public ManipulatorStateServiceImpl(Repository rep, ILogger logger) : base(rep) + { + _logger = logger; + } + + public List GetAllManipulatorState() + { + var list = new List(); + try + { + list = base._rep.GetList(); + } + catch (Exception ex) + { + _logger.LogError($"鎵鏈夋満姊拌噦鐘舵佷俊鎭幏鍙栧紓甯:{ex.Message}"); + } + return list; + } + + public List GetFreeManipulatorState() + { + var list = new List(); + try + { + list = base._rep.GetList() + .Where(x => x.ManipulatorNo != "" && (x.TaskNo == null || x.TaskNo == "") && x.ManipulatorWorkState == "浠诲姟绌洪棽") + .ToList(); + } + catch (Exception ex) + { + _logger.LogError($"绌洪棽鏈烘鑷傜姸鎬佷俊鎭幏鍙栧紓甯:{ex.Message}"); + } + return list; + } + + public async Task UpdateAsync(ManipulatorState record) + { + bool result = await _rep.UpdateAsync(record); + return result; + } + + public async Task UpdateOrAddByResponse(ManipulatorStateResponseEntity response) + { + ManipulatorState record = new ManipulatorState() + { + ManipulatorNo = response.ManipulatorNo, + ManipulatorAlarmState = response.ManipulatorAlarmState, + ManipulatorWorkState = response.ManipulatorWorkState, + TaskNo = response.TaskNo, + RefreshTime = DateTime.Now, + }; + bool result = false; + try + { + var list = GetAllManipulatorState(); + if (list.Where(x => x.ManipulatorNo == response.ManipulatorNo).Count() == 0) + { + result = _rep.Insert(record); + } + else + { + record.ID = list.Where(x => x.ManipulatorNo == response.ManipulatorNo).FirstOrDefault().ID; + result = await _rep.UpdateAsync(record); + } + } + catch(Exception ex) + { + _logger.LogError($"鏈烘鑷傜姸鎬佷俊鎭洿鏂板紓甯:{ex.Message}"); + } + return result; + } + } +} diff --git a/SlnMesnac.TouchSocket/AirPorthttpClient.cs b/SlnMesnac.TouchSocket/AirPorthttpClient.cs index e9f09fe..a4e1659 100644 --- a/SlnMesnac.TouchSocket/AirPorthttpClient.cs +++ b/SlnMesnac.TouchSocket/AirPorthttpClient.cs @@ -56,6 +56,10 @@ namespace SlnMesnac.TouchSocket return Task.CompletedTask; } + /// + /// AGV鍛煎彨璇锋眰 + /// + /// public static string AGVCallRequest() { JToken responseValue = AirportAGVClient.InvokeT("POST:", null, new AGVArrivalSingalEntity()); @@ -63,6 +67,10 @@ namespace SlnMesnac.TouchSocket return responseValue.ToString(); } + /// + /// 鏈烘鑷傚紑濮嬪伐浣滆姹 + /// + /// public static string ManipulatorStartRequest() { JToken responseValue = AirportAGVClient.InvokeT("POST:", null, new AGVArrivalSingalEntity()); @@ -70,6 +78,11 @@ namespace SlnMesnac.TouchSocket return responseValue.ToString(); } + /// + /// AGV鐘舵佽姹 + /// + /// + /// public static AGVStateResponseEntity AGVStateRequest(AGVStateRequestEntity aGVStateRequest) { JToken responseValue = AirportAGVClient.InvokeT("POST:/m1/5051269-4712337-default/apitest/AGVtest", null, aGVStateRequest); @@ -87,6 +100,11 @@ namespace SlnMesnac.TouchSocket return aGVStateResponseEntity; } + /// + /// 鏈烘鑷傜姸鎬佽姹 + /// + /// + /// public static ManipulatorStateResponseEntity ManipulatorStateRequest(ManipulatorStateRequestEntity manipulatorStateRequest) { JToken responseValue = AirportAGVClient.InvokeT("POST:/m1/5051269-4712337-default/apitest/manipulatortest", null, manipulatorStateRequest); diff --git a/SlnMesnac.WPF/ViewModel/IndexPage/IndexContentViewModel.cs b/SlnMesnac.WPF/ViewModel/IndexPage/IndexContentViewModel.cs index 51d78e3..6f5c118 100644 --- a/SlnMesnac.WPF/ViewModel/IndexPage/IndexContentViewModel.cs +++ b/SlnMesnac.WPF/ViewModel/IndexPage/IndexContentViewModel.cs @@ -43,9 +43,12 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage { private ILogger _logger; private ILogger _taskBusinessLogger; + private ILogger _stateBusinessLogger; private IAirportTaskService _taskservice; private IAGVStateService _agvstateService; + private IManipulatorStateService _monipulatorstateService; private BaseTaskInfoBusiness _taskInfoBusiness; + private BaseStateRefreshBusiness _StateRefreshBusiness; private DispatcherTimer _timer; @@ -56,7 +59,9 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage _taskBusinessLogger = App.ServiceProvider.GetService>(); _taskservice = App.ServiceProvider.GetService(); _agvstateService = App.ServiceProvider.GetService(); + _monipulatorstateService = App.ServiceProvider.GetService(); _taskInfoBusiness = BaseTaskInfoBusiness.GetInstance(_taskBusinessLogger, _taskservice, _agvstateService); + _StateRefreshBusiness = BaseStateRefreshBusiness.GetInstance(_stateBusinessLogger, _agvstateService, _monipulatorstateService); _taskInfoBusiness._Taskaction += task => { TaskItems = new ObservableCollection @@ -70,7 +75,9 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage private void Init() { #region 娴嬭瘯鏁版嵁 - + _StateRefreshBusiness.UpdateManipulatorStateByResposne( + new Model.AirportApiEntity.ManipulatorStateRequestEntity() + { ManipulatorNo = "1", SignalSendTime = DateTime.Now.ToString()}); List AirportTaskItem = _taskservice.GetTaskInfos(); TaskItems = new ObservableCollection(AirportTaskItem); // TaskItems = new ObservableCollection