From f546c6012b27a31a0c70089b6398c9ce935f2ce0 Mon Sep 17 00:00:00 2001
From: 刘磊 <1161824510@qq.com>
Date: 星期六, 23 十一月 2024 14:56:54 +0800
Subject: [PATCH] 1

---
 Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs |  291 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 291 insertions(+), 0 deletions(-)

diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs
new file mode 100644
index 0000000..1c27251
--- /dev/null
+++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs
@@ -0,0 +1,291 @@
+锘縰sing HslCommunication;
+using Newtonsoft.Json;
+using Quartz;
+using System.Diagnostics.CodeAnalysis;
+using WIDESEAWCS_BasicInfoRepository;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.MOM;
+using WIDESEAWCS_IProcessRepository;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
+using WIDESEAWCS_Tasks.StackerCraneJob;
+
+namespace WIDESEAWCS_Tasks
+{
+    [DisallowConcurrentExecution]
+    public class CommonStackerStationCraneJob : JobBase, IJob
+    {
+        private readonly ITaskService _taskService;
+        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly IProcessRepository _processRepository;
+        private readonly IDt_StationManagerRepository _stationManagerRepository;
+
+        public CommonStackerStationCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IProcessRepository processRepository, IDt_StationManagerRepository stationManagerRepository)
+        {
+            _taskService = taskService;
+            _taskExecuteDetailService = taskExecuteDetailService;
+            _taskRepository = taskRepository;
+            _processRepository = processRepository;
+            _stationManagerRepository = stationManagerRepository;
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            try
+            {
+                // speStackerCrane.GetStackerCraneStatus<StackerCraneAutoStatus>();
+                // speStackerCrane.GetStackerCraneStatus<StackerCraneWorkStatus>();
+                // speStackerCrane.GetStackerCraneStatus<StackerCraneStatus>();
+
+                CommonStackerStationCrane commonStackerCrane = (CommonStackerStationCrane)context.JobDetail.JobDataMap.Get("JobParams");
+                if (commonStackerCrane != null)
+                {
+                    //EqptAlive(commonStackerCrane);
+                    //Console.Out.WriteLine(commonStackerCrane.DeviceName);
+                    if (!commonStackerCrane.IsEventSubscribed)
+                    {
+                        commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+                    }
+
+                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
+                    {
+                        commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
+
+                        if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
+                        {
+                            Dt_Task? task = GetTask(commonStackerCrane);
+                            if (task != null)
+                            {
+                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
+                                if (stackerCraneTaskCommand != null)
+                                {
+                                    bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
+                                    if (sendFlag)
+                                    {
+                                        commonStackerCrane.LastTaskType = task.TaskType;
+                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteError("CommonStackerStationCraneJob", "test", ex);
+                //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
+            }
+            WriteDebug("CommonStackerStationCraneJob", "test");
+            return Task.CompletedTask;
+        }
+
+        /// <summary>
+        /// 浠诲姟瀹屾垚浜嬩欢璁㈤槄鐨勬柟娉�
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
+        {
+            CommonStackerStationCrane? commonStackerCrane = sender as CommonStackerStationCrane;
+            if (commonStackerCrane != null)
+            {
+                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
+                {
+                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
+                    _taskService.StackCraneTaskCompletedByStation(e.TaskNum);
+                    commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇浠诲姟
+        /// </summary>
+        /// <param name="commonStackerCrane">鍫嗗灈鏈哄璞�</param>
+        /// <returns></returns>
+        private Dt_Task? GetTask(CommonStackerStationCrane commonStackerCrane)
+        {
+            Dt_Task task;
+            if (commonStackerCrane.LastTaskType == null)
+            {
+                task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
+            }
+            else
+            {
+                if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+                {
+                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+                    if (task == null)
+                    {
+                        task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+                    }
+                }
+                else
+                {
+                    task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+                }
+            }
+
+            if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            {
+                if (OutTaskStationIsOccupied(task) != null)
+                {
+                    return task;
+                }
+                else
+                {
+                    //List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList();
+                    //List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStaionCodes);
+                    //foreach (var item in tasks)
+                    //{
+                    //    if (OutTaskStationIsOccupied(task) != null)
+                    //    {
+                    //        return task;
+                    //    }
+                    //}
+                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+                }
+            }
+            else if (task == null)
+            {
+                task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+            }
+
+            return task;
+        }
+
+        /// <summary>
+        /// 鍑哄簱浠诲姟鍒ゆ柇鍑哄簱绔欏彴鏄惁琚崰鐢�
+        /// </summary>
+        /// <param name="task">浠诲姟瀹炰綋</param>
+        /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
+        private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
+        {
+            var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.TargetAddress && x.Roadway == task.Roadway);
+            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationinfo.stationPLC);
+            if (device != null)
+            {
+                CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)device;
+                if (conveyorLine.IsOccupied(stationinfo.stationChildCode))//鍑哄簱绔欏彴鏈鍗犵敤
+                {
+                    return task;
+                }
+            }
+            else
+            {
+                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵task.NextAddress}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel
+        /// </summary>
+        /// <param name="task">浠诲姟瀹炰綋</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task)
+        {
+            StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
+
+            stackerCraneTaskCommand.Barcode = task.PalletCode;
+            stackerCraneTaskCommand.TaskNum = task.TaskNum;
+            stackerCraneTaskCommand.WorkType = 1;
+            stackerCraneTaskCommand.TrayType = 0;
+            stackerCraneTaskCommand.StartCommand = 1;
+
+            string[] sourceCodes = task.SourceAddress.Split("-");
+            if (sourceCodes.Length == 3)
+            {
+                stackerCraneTaskCommand.StartRow = (short)(Convert.ToInt16(sourceCodes[0]) % 2 == 0 ? 2:1);
+                stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+                stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+            }
+            else
+            {
+                //鏁版嵁閰嶇疆閿欒
+                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                return null;
+            }
+            string[] targetCodes = task.TargetAddress.Split("-");
+            if (targetCodes.Length == 3)
+            {
+                //if (task.Roadway.Contains("FR"))
+                //{
+                //    if(task.Roadway.EndsWith("03")|| task.Roadway.EndsWith("01"))
+                //    {
+
+                //        stackerCraneTaskCommand.EndRow = (short)(Convert.ToInt16(targetCodes[0]) % 2 == 0 ? 1 : 2);
+                //        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                //        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+                //    }
+                //    else
+                //    {
+
+                //        stackerCraneTaskCommand.EndRow = (short)(Convert.ToInt16(targetCodes[0]) % 2 == 0 ? 2 : 1);
+                //        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                //        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+                //    }
+                //}
+                //else
+                //{
+                   
+                //}
+                stackerCraneTaskCommand.EndRow = (short)(Convert.ToInt16(targetCodes[0]) % 2 == 0 ? 2 : 1);
+                stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+            }
+            else
+            {
+                //鏁版嵁閰嶇疆閿欒
+                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
+                return null;
+            }
+
+            return stackerCraneTaskCommand;
+        }
+
+
+        /// <summary>
+        /// 璁惧蹇冭烦
+        /// </summary>
+        /// <param name="commonStackerCrane"></param>
+        public async void EqptAlive(CommonStackerCrane commonStackerCrane)
+        {
+            if (commonStackerCrane.StackerOnline)
+            {
+                BasicDto dto = new BasicDto
+                {
+                    EmployeeNo = "T00001",
+                    EquipmentCode = commonStackerCrane.DeviceCode,
+                    RequestTime = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),
+                    SessionId = Guid.NewGuid().ToString(),
+                    Software = commonStackerCrane.DeviceName,
+                };
+                var respone = await HttpHelper.PostAsync("http://ts-momapp01:12020/api/MachineIntegration/EqptAlive", dto.ToJsonString());
+                if (respone != null)
+                {
+                    var result = JsonConvert.DeserializeObject<ResponseEqptAliveDto>(respone);
+                    if (result != null && result.Success)
+                    {
+                        if (result.KeyFlag == "99")
+                            commonStackerCrane.StackerOnline = true;
+                        else if (result.KeyFlag == "98")
+                            commonStackerCrane.StackerOnline = false;
+                    }
+                }
+            }
+        }
+
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3