From 6cc35000a6e138cfad96e7b02f8aeddcdb4ba6bf Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期二, 24 六月 2025 09:57:25 +0800
Subject: [PATCH] 代码提交

---
 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs |  292 +++++++++++++++++++++++++++------------------------------
 1 files changed, 138 insertions(+), 154 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs"
index 4ce458e..44c3ffc 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/SendTaskAGV.cs"
@@ -1,174 +1,157 @@
 锘縰sing System.Diagnostics;
 using System.Text;
+using Microsoft.Data.SqlClient;
+using Newtonsoft.Json;
+using WIDESEA_Core.Enums;
 using WIDESEAWCS_Common.AGVEnum;
 using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.Tool;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_ISystemRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
 
-namespace WIDESEAWCS_Tasks.AGVJob
+namespace WIDESEAWCS_Tasks
 {
     public class SendTaskAGV
     {
         private static int _readSendAGVTaskSignalso = 0;
         private static bool isTrue1 = false;
         private static string name1 = "";
-
-        public static void SendAGVTask1(AGV agv, ITaskRepository _taskRepository)
+        public static string url = AppSettings.Configuration["AGVTaskGeneration"];
+        public static void SendAGVTask1(ITaskRepository _taskRepository, IDt_StationinfoRepository _stationinfoRepository)
         {
-            //TODO: Implement sending task to AGV
+            WebResponseContent content = new WebResponseContent();
             try
             {
-                if (agv == null)
+                Dt_Task task = _taskRepository.QueryData(x => x.TaskState == (int)TaskInStatusEnum.InNew).OrderBy(r => r.CreateDate).FirstOrDefault(); //.ThenByDescending(r => r.Grade)
+                if (task != null)
                 {
-                    return;
-                }
-
-                var taskInteractiveR = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.taskInteractiveR.ToString()).FirstOrDefault().DeviceProAddress;
-                var taskInteractiveW = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.taskInteractiveW.ToString()).FirstOrDefault().DeviceProAddress;
-                var resetTaskW = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.resetTaskInteractiveW.ToString()).FirstOrDefault().DeviceProAddress;
-                var resetTaskInteractiveR = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.resetTaskInteractiveR.ToString()).FirstOrDefault().DeviceProAddress;
-                var taskID = agv.DeviceProDTOs.Where(r => r.DeviceProParamName == TaskDBName.taskID.ToString()).FirstOrDefault().DeviceProAddress;
-
-                int TaskInteractive = agv.Communicator.Read<int>(taskInteractiveR);//1鏀跺埌
-                int TaskInteractiveW = agv.Communicator.Read<int>(taskInteractiveW);//0鍒濆/1涓嬪彂/2鍙栨秷/3鏇存敼
-                int resetTaskInteractiveW = agv.Communicator.Read<int>(resetTaskW);
-                int resetTaskInteractiver = agv.Communicator.Read<int>(resetTaskInteractiveR);
-                if (isTrue1 && name1 == agv.DeviceName)
-                {
-                    if (TaskInteractiveW != 0 || resetTaskInteractiveW != 0 || TaskInteractive != 0)
+                    TaskGenerationDto taskGenerationDto = new TaskGenerationDto();
                     {
-                        agv.Communicator.Write(resetTaskW, 1);
-                        Task.Delay(2000).Wait();
-                        resetTaskInteractiveW = agv.Communicator.Read<int>(resetTaskW);
-                        if (resetTaskInteractiveW == 1)
-                        {
-                            agv.Communicator.Write(resetTaskW, 0);
-                            agv.Communicator.Write(taskInteractiveW, 0);
-                            Task.Delay(2000).Wait();
-                        }
-                        return;
+                        taskGenerationDto.taskid = task.TaskNum.ToString();
+                        taskGenerationDto.taskType = task.TaskType.ToString();
+                        taskGenerationDto.floor = task.Floor.ToString();
+                        taskGenerationDto.param1 = task.SourceAddress.ToString();
+                        taskGenerationDto.param2 = task.TargetAddress.ToString();
+                        taskGenerationDto.param3 = "";
+                        taskGenerationDto.param4 = "";
+                        taskGenerationDto.param5 = "";
+                        taskGenerationDto.param6 = "";
+                        taskGenerationDto.param7 = "";
+                        taskGenerationDto.param8 = "";
+                        taskGenerationDto.param9 = "";
+                    }
+                    var ResultData = HttpHelper.Post(url, taskGenerationDto.ToJson(), headers: new Dictionary<string, string>());
+                    var res = JsonConvert.DeserializeObject<WebResponseContent>(ResultData);
+                    if (res.code == 200)
+                    {
+                        WriteLog.Info("浠诲姟涓嬪彂鎴愬姛").Write($"浠诲姟鍙穥task.TaskNum}", "浠诲姟涓嬪彂鎴愬姛");
+                        int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
+                        task.TaskState = nextStatus;
+                        task.Dispatchertime = DateTime.Now;
+                        _taskRepository.UpdateData(task);
                     }
                     else
                     {
-                        isTrue1 = false;
-                        name1 = "";
+                        WriteLog.Info("浠诲姟涓嬪彂澶辫触").Write($"浠诲姟鍙穥task.TaskNum}锛屼俊鎭瘂res.Message}", "浠诲姟涓嬪彂澶辫触");
+                        //_unitOfWorkManage.RollbackTran();
+                        content = WebResponseContent.Instance.Error($"{res.Message}");
                     }
                 }
-                if (resetTaskInteractiver == 1)
+                Thread.Sleep(100);
+                Dt_Task dt_Task = _taskRepository.QueryData(x => x.TaskState == (int)TaskInStatusEnum.AGV_Queue).OrderBy(r => r.CreateDate).FirstOrDefault();
+                if (dt_Task != null)
                 {
-                    agv.Communicator.Write(taskInteractiveW, 0);
-                    for (int i = 0; i < 5; i++)
+                    var station = _stationinfoRepository.QueryFirst(x => x.StationCode == dt_Task.SourceAddress);
+                    // 鏌ユ壘涓や釜鍙敤鐨勭┖缂撳瓨鏋�
+                    var freeStations = _stationinfoRepository
+                        .QueryData(x => x.Location_state == LocationStatusEnum.Free.ObjToInt() && x.Enable && x.Remark == station.Remark && x.Area == station.Area)//  && x.Stationtype == station.Stationtype
+                        .Take(2) // 鍙彇鍓嶄袱涓�
+                        .ToList();
+
+                    int floor = 0;
+                    if (station.Area.Contains("A鍖�"))
                     {
-                        Thread.Sleep(300);
-                        var agvnumber = Convert.ToInt32(agv.Communicator.Read<int>(taskInteractiveW));
-                        if (agvnumber != 0)
-                        {
-                            agv.Communicator.Write(taskInteractiveW, 0);
-                        }
-                        else
-                        {
-                            break;
-                        }
+                        floor = 32;
                     }
-                }
-                if (0 == TaskInteractive && TaskInteractiveW == 0)
-                {
-                    Dt_Task agvTask = _taskRepository.QueryData(r => r.TaskState == (int)TaskInStatusEnum.InNew && r.Roadway == agv.DeviceName && r.TaskType == (int)TaskOutboundTypeEnum.Outbound).OrderBy(r => r.CreateDate).OrderByDescending(r => r.Grade).FirstOrDefault();
-                    if (null != agvTask)
+                    else
                     {
-                        //鍐欏叆浠诲姟淇℃伅
-                        string rel = TaskWrite(agv, agvTask, AGVJobEnum.newTaskEnum);
-                        Thread.Sleep(1000);
-                        string taskId = agv.Communicator.Read<string>(taskID).ToString();
-                        if (taskId != agvTask.TaskNum.ToString())
-                        {
-                            isTrue1 = true;
-                            name1 = agv.DeviceName;
-                            //WriteLog.Info("SendAGVTask").Write("缁橝GV鍐欏叆浠诲姟澶辫触," + agvTask.agv_tasknum + DateTime.Now, "SendAGVTask");
-                            throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟澶辫触,浠诲姟鍙穥0}", agvTask.TaskNum));
-                        }
-                        if (string.IsNullOrEmpty(rel))
-                        {
-                            //鍐欏叆浠诲姟纭1
-                            agv.Communicator.Write(taskInteractiveW, 1);
-                            Thread.Sleep(1000);
-                            //璇诲彇AGV淇″彿
-                            int ReadTask_1_OK = agv.Communicator.Read<int>(taskInteractiveR);
-                            if (ReadTask_1_OK == 1)
-                            {
-                                //鍐欏叆WCS纭淇″彿0
-                                agv.Communicator.Write(taskInteractiveW, 0);
-                                Thread.Sleep(2000);
-                                //璇诲彇AGV淇″彿鏄惁涓�0
-                                int ReadTask_0_OK = agv.Communicator.Read<int>(taskInteractiveR);
-                                if (ReadTask_0_OK == 0)
-                                {
-                                    int nextStatus = agvTask.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
-                                    agvTask.TaskState = nextStatus;
-                                    agvTask.Dispatchertime = DateTime.Now;
-                                    _taskRepository.UpdateData(agvTask);
-                                    // 涓婁紶AGV杩愯鏁版嵁 by xiaoyang
-                                    //SendMESTask.SendMesTask(agvTask, 0);
-                                }
-                                else
-                                {
-                                    isTrue1 = true;
-                                    name1 = agv.DeviceName;
-                                    throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟纭0澶辫触,浠诲姟鍙穥0}", agvTask.TaskNum));
-                                }
-                            }
-                            else if (ReadTask_1_OK == 11)
-                            {
-                                agv.Communicator.Write(taskInteractiveW, 0);
-                                Thread.Sleep(2000);
-                                int ReadTask_0_Error = agv.Communicator.Read<int>(taskInteractiveR);
-                                if (ReadTask_0_Error == 0)
-                                {
-                                    int nextStatus = agvTask.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
-                                    agvTask.TaskState = nextStatus;
-                                    agvTask.Dispatchertime = DateTime.Now;
-                                    _taskRepository.UpdateData(agvTask);
-                                }
-                                else
-                                {
-                                    isTrue1 = true;
-                                    name1 = agv.DeviceName;
-                                    throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟寮傚父纭0澶辫触,浠诲姟鍙穥0}", agvTask.TaskNum));
-                                }
-                            }
-                            else
-                            {
-                                isTrue1 = true;
-                                name1 = agv.DeviceName;
-                                throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟纭1澶辫触,浠诲姟鍙穥0}", agvTask.TaskNum));
-                            }
-                        }
-                        else
-                        {
-                            isTrue1 = true;
-                            name1 = agv.DeviceName;
-                            throw new Exception(string.Format("缁橝GV鍐欏叆浠诲姟澶辫触,浠诲姟鍙穥0}" + rel, agvTask.TaskNum));
-                        }
+                        floor = 128;
                     }
+                    if (freeStations.Count < 2)
+                    {
+                        throw new Exception("鏈壘鍒颁袱涓彲鐢ㄧ殑绌虹紦瀛樻灦");
+                    }
+                    // 妫�鏌ヨ繖涓や釜缂撳瓨鏋舵槸鍚﹁浠诲姟鍗犵敤
+                    var stationCodes = freeStations.Select(s => s.StationCode).ToList();
+                    freeStations[0].Location_state = LocationStatusEnum.Lock.ObjToInt();
+                    _stationinfoRepository.UpdateData(freeStations[0]);
+                    freeStations[1].Location_state = LocationStatusEnum.Lock.ObjToInt();
+                    _stationinfoRepository.UpdateData(freeStations[1]);
+                    //stationCodes.
+                    var tasks = _taskRepository.QueryData(x => stationCodes.Contains(x.SourceAddress) || stationCodes.Contains(x.TargetAddress)).ToList();
+                    if (tasks.Any())
+                    {
+                        throw new Exception("缂撳瓨鏋跺凡鏈変换鍔�");
+                    }
+                    dt_Task.TargetAddress = string.Join("||", freeStations.Select(s => s.StationCode));
+                    dt_Task.NextAddress = string.Join("||", freeStations.Select(s => s.StationCode));
+                    dt_Task.TaskState = (int)TaskInStatusEnum.InNew;
+                    dt_Task.TaskType = floor;
+                    _taskRepository.UpdateData(dt_Task);
                 }
             }
             catch (Exception ex)
             {
-                StackTrace sta = new StackTrace(ex, true);
-                StackTrace st = new StackTrace(new StackFrame(true));
-                StackFrame sf = sta.GetFrame(0);
-                //WriteLog.Info("SendAGVTask").Write(ex.Message + "琛屽彿" + sf.GetFileLineNumber(), "SendAGVTask");
+
             }
-            finally
-            {
-                // WriteLog.Info("SendAGVTask").Write(agv.PLCName+"\t"+DateTime.Now, "SendAGVTask");
-                Interlocked.Exchange(ref _readSendAGVTaskSignalso, 0);
-            }
+
         }
 
         public static void SendAGVTask(AGV agv, ITaskRepository _taskRepository)
         {
+
+            // 杩炴帴瀛楃涓� - 鏍规嵁浣犵殑鏈嶅姟鍣ㄤ俊鎭慨鏀�
+            string connectionString = "Data Source=.;Initial Catalog=WIDESEAWCS_GanFengLiYeNew;User ID=sa;Password=sa123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
+            List<Dt_Task> dt_Tasks = _taskRepository.QueryData(x => x.TaskState == (int)TaskInStatusEnum.InNew);
+            foreach (Dt_Task task in dt_Tasks)
+            {
+                // 瑕佹彃鍏ョ殑SQL璇彞
+                string insertSql = "INSERT INTO Dt_Stationinfo (StationCode, Location_state,Area,Enable,LastUpdateTime,Remark) VALUES (@StationCode, @Location_state,@Area,@Enable,@LastUpdateTime,@Remark)";
+
+                try
+                {
+                    using (SqlConnection connection = new SqlConnection(connectionString))
+                    {
+                        connection.Open();
+
+                        using (SqlCommand command = new SqlCommand(insertSql, connection))
+                        {
+                            // 娣诲姞鍙傛暟闃叉SQL娉ㄥ叆
+                            command.Parameters.AddWithValue("StationCode", task.TaskNum);
+                            command.Parameters.AddWithValue("Location_state", task.TaskNum);
+                            command.Parameters.AddWithValue("Area", task.Roadway);
+                            command.Parameters.AddWithValue("Enable", task.TaskNum);
+                            command.Parameters.AddWithValue("LastUpdateTime", DateTime.Now);
+                            command.Parameters.AddWithValue("Remark", task.Roadway);
+                            command.Parameters.AddWithValue("Creater", "WCS");
+                            command.Parameters.AddWithValue("CreateDate", DateTime.Now);
+
+                            int rowsAffected = command.ExecuteNonQuery();
+                            Console.WriteLine($"鎴愬姛鎻掑叆 {rowsAffected} 琛屾暟鎹�");
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    Console.WriteLine($"鍙戠敓閿欒: {ex.Message}");
+                }
+            }
+
             // 妫�鏌GV鏄惁涓虹┖
             if (agv == null)
             {
@@ -191,24 +174,24 @@
             try
             {
                 // 璇诲彇浠诲姟浜や簰鍜岄噸缃氦浜掔殑鐘舵��
-                int taskInteractive = agv.Communicator.Read<int>(taskInteractiveR); // 1琛ㄧず鏀跺埌
-                int taskInteractiveW = agv.Communicator.Read<int>(taskInteractiveW1); // 0鍒濆/1涓嬪彂/2鍙栨秷/3鏇存敼
-                int resetTaskInteractiveW = agv.Communicator.Read<int>(resetTaskW);
-                int resetTaskInteractiver = agv.Communicator.Read<int>(resetTaskInteractiveR);
+                int taskInteractive = agv.Communicator.Read<Int16>(taskInteractiveR); // 1琛ㄧず鏀跺埌
+                int taskInteractiveW = agv.Communicator.Read<Int16>(taskInteractiveW1); // 0鍒濆/1涓嬪彂/2鍙栨秷/3鏇存敼
+                int resetTaskInteractiveW = agv.Communicator.Read<Int16>(resetTaskW);
+                int resetTaskInteractiver = agv.Communicator.Read<Int16>(resetTaskInteractiveR);
 
                 // 澶勭悊浠诲姟浜や簰W鍜岄噸缃氦浜扺涓嶄负0鐨勬儏鍐�
                 if (isTrue1 && name1 == agv.DeviceName)
                 {
                     if (taskInteractiveW != 0 || resetTaskInteractiveW != 0 || taskInteractive != 0)
                     {
-                        agv.Communicator.Write(resetTaskW, 1);
+                        agv.Communicator.Write<UInt16>(resetTaskW, 1);
                         Task.Delay(2000).Wait();
-                        resetTaskInteractiveW = agv.Communicator.Read<int>(resetTaskW);
+                        resetTaskInteractiveW = agv.Communicator.Read<Int16>(resetTaskW);
 
                         if (resetTaskInteractiveW == 1)
                         {
-                            agv.Communicator.Write(resetTaskW, 0);
-                            agv.Communicator.Write(taskInteractiveW1, 0);
+                            agv.Communicator.Write<UInt16>(resetTaskW, 0);
+                            agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                             Task.Delay(2000).Wait();
                         }
                         return;
@@ -220,14 +203,14 @@
                 // 濡傛灉閲嶇疆浜や簰R涓�1锛屽垯閲嶇疆浠诲姟浜や簰W
                 if (resetTaskInteractiver == 1)
                 {
-                    agv.Communicator.Write(taskInteractiveW1, 0);
+                    agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                     for (int i = 0; i < 5; i++)
                     {
                         Task.Delay(300).Wait(); // 鐢═ask.Delay浠f浛Thread.Sleep锛屼互閬垮厤绾跨▼闃诲
-                        int agvNumber = agv.Communicator.Read<int>(taskInteractiveW1);
+                        int agvNumber = agv.Communicator.Read<Int16>(taskInteractiveW1);
                         if (agvNumber != 0)
                         {
-                            agv.Communicator.Write(taskInteractiveW1, 0);
+                            agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                         }
                         else
                         {
@@ -251,7 +234,8 @@
 
                         // 妫�鏌ヤ换鍔D鏄惁鍐欏叆姝g‘
                         string taskId = agv.Communicator.Read<string>(taskID);
-                        if (taskId != agvTask.TaskNum.ToString())
+                        string numberPart = taskId.Split('-')[1];
+                        if (numberPart != agvTask.TaskNum.ToString())
                         {
                             throw new Exception($"缁橝GV鍐欏叆浠诲姟澶辫触,浠诲姟鍙穥agvTask.TaskNum}");
                         }
@@ -260,19 +244,19 @@
                         if (string.IsNullOrEmpty(rel))
                         {
                             // 鍐欏叆浠诲姟纭淇″彿1
-                            agv.Communicator.Write(taskInteractiveW1, 1);
+                            agv.Communicator.Write<UInt16>(taskInteractiveW1, 1);
                             Task.Delay(1000).Wait();
 
                             // 璇诲彇AGV鐨勭‘璁や俊鍙�
-                            int readTask1Ok = agv.Communicator.Read<int>(taskInteractiveR);
+                            int readTask1Ok = agv.Communicator.Read<Int16>(taskInteractiveR);
                             if (readTask1Ok == 1)
                             {
                                 // 鍐欏叆WCS鐨勭‘璁や俊鍙�0
-                                agv.Communicator.Write(taskInteractiveW1, 0);
+                                agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                                 Task.Delay(2000).Wait();
 
                                 // 鍐嶆璇诲彇AGV鐨勭‘璁や俊鍙�
-                                int readTask0Ok = agv.Communicator.Read<int>(taskInteractiveR);
+                                int readTask0Ok = agv.Communicator.Read<Int16>(taskInteractiveR);
                                 if (readTask0Ok == 0)
                                 {
                                     // 鏇存柊浠诲姟鐘舵�佸苟淇濆瓨
@@ -292,7 +276,7 @@
                             else if (readTask1Ok == 11)
                             {
                                 // 澶勭悊浠诲姟寮傚父鎯呭喌
-                                agv.Communicator.Write(taskInteractiveW1, 0);
+                                agv.Communicator.Write<UInt16>(taskInteractiveW1, 0);
                                 Task.Delay(2000).Wait();
                                 int readTask0Error = agv.Communicator.Read<int>(taskInteractiveR);
 
@@ -342,7 +326,7 @@
         public static string TaskWrite(AGV client, Dt_Task agvTask, AGVJobEnum jobEnum)
         {
             List<byte> sendData = new List<byte>();
-            string tmp = agvTask.TaskNum.ToString();
+            string tmp = "KH-" + agvTask.TaskNum.ToString();
             List<byte> taskID = Encoding.Default.GetBytes(tmp).ToList();//浠诲姟ID
             taskID.Insert(0, 30);
             taskID.Insert(1, Convert.ToByte(tmp.Length));
@@ -377,11 +361,11 @@
             Array.Reverse(taskType);
             sendData.AddRange(taskType);
 
-            List<byte> containerType = Encoding.Default.GetBytes(agvTask.PalletCode).ToList();
+            List<byte> containerType = Encoding.Default.GetBytes(agvTask.Barcode).ToList();
             containerType.Insert(0, 30);
-            containerType.Insert(1, Convert.ToByte(agvTask.PalletCode.Length));
+            containerType.Insert(1, Convert.ToByte(agvTask.Barcode.Length));
 
-            for (int i = 0; i < 30 - agvTask.PalletCode.Length; i++)
+            for (int i = 0; i < 30 - agvTask.Barcode.Length; i++)
             {
                 containerType.Add(0);
             }

--
Gitblit v1.9.3