From d06e44eb1c8818c8d19709602631eb7888d4f0e9 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期二, 06 五月 2025 08:53:01 +0800
Subject: [PATCH] 修改程序,AGV交互

---
 Admin.NET/WCS.Application/Util/HttpService.cs |  227 +++++++++++++++++++++++++++-----------------------------
 1 files changed, 108 insertions(+), 119 deletions(-)

diff --git a/Admin.NET/WCS.Application/Util/HttpService.cs b/Admin.NET/WCS.Application/Util/HttpService.cs
index e37a36d..50d2e65 100644
--- a/Admin.NET/WCS.Application/Util/HttpService.cs
+++ b/Admin.NET/WCS.Application/Util/HttpService.cs
@@ -3,8 +3,11 @@
 using Furion.Logging;
 using Furion.RemoteRequest.Extensions;
 using Newtonsoft.Json;
+using System.Net.Http.Headers;
+using System.Reflection.PortableExecutable;
 using System.Text;
 using WCS.Application.Entity;
+using WCS.Application.Util;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.ComponentTCBBatchCreateContainerServiceVersionResponse.Types;
 
 namespace WCS.Application;
@@ -12,11 +15,26 @@
 {
     private dynamic Urls;
 
-    private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
+    private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); 
+    private static Dictionary<string, string> dicConverCar = new Dictionary<string, string>();
     public HttpService()
     {
         var _sysConfigService = App.GetService<SysConfigService>();
         Urls = _sysConfigService.GetSystemInfo().Result;
+        dicConverCar = new Dictionary<string, string>
+        {
+            {"013","190601"},
+            {"014","191201"},
+            {"015","190602"},
+            {"016","191202"},
+
+            {"002","030401"},
+            {"006","030402"},
+            {"003","030601"},
+            {"007","030602"},
+            {"005","031201"},
+            {"008","031202"},
+        };
     }
 
 
@@ -24,16 +42,14 @@
     /// 璋冪敤WMS鎺ュ彛鐢宠宸烽亾鎺ュ彛
     /// </summary>
     /// <param name="palletNo"></param>
-    /// <param name="startLocat"></param>
-    /// <param name="taskModel"></param>
-    /// <param name="ceng"></param>
+    /// <param name="startLocat"></param> 
     /// <param name="endLocat"></param>
     /// <param name="taskNo"></param>
     /// <returns></returns>
-    public string RequestRoadWay(string palletNo, string startLocat, string taskModel, string ceng, ref string endLocat, ref string taskNo)
+    public string RequestRoadWay(string palletNo, string startLocat, ref string endLocat, ref string taskNo)
     {
         string returnStr = "";
-
+        var stationNum = startLocat.PadLeft(3, '0');
 
         var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo);
 
@@ -42,12 +58,11 @@
             var model = new RequestAsnTask()
             {
                 PalletNo = palletNo,
-                HouseNo = "W01",
-                TaskModel = taskModel
+                HouseNo = "W01"
             };
 
             string url = Urls.WMSAddress + ":" + Urls.WMSPort;
-            var result = (url + "/api/DownAPi/RequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
+            var result = (url + "/api/DownAPi/RequestMiJiRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
             Log.Information("璋冪敤WMS鎺ュ彛鍙嶉浠诲姟鎺ュ彛" + result.ToJson());
             if (result.Success == 0)
             {
@@ -56,6 +71,7 @@
                 {
                     TaskType = TaskTypeEnum.In,
                     Status = TaskStatusEnum.Wait,
+                    Type = PLCTypeEnum.ConveyorLine,
                     Origin = "WMS",
                     StartLocate = startLocat,
                     PalletNo = palletNo,
@@ -64,7 +80,9 @@
                     EndLocate = result.TaskList.EndLocate,
                     EndRoadway = result.TaskList.EndRoadway
                 };
-
+                
+                var endLocat2 = PLCCommon.RoadwayToStationNum(taskAdd.EndRoadway, stationNum);
+                taskAdd.StartRoadway = dicConverCar[endLocat2];
                 _db.Insertable(taskAdd).ExecuteCommand();
                 endLocat = result.TaskList.EndRoadway;
                 taskNo = result.TaskList.TaskNo;
@@ -84,135 +102,46 @@
             taskNo = task.TaskNo;
         }
 
-        endLocat = PLCCommon.RoadwayToStationNum(endLocat, ceng);
+        endLocat = PLCCommon.RoadwayToStationNum(endLocat, stationNum);
 
         return returnStr;
     }
 
-    /// <summary>
-    /// 璋冪敤WMS鎺ュ彛鑷姩鐮佸灈缁戝畾淇℃伅杩斿洖宸烽亾鍙�
-    /// </summary>
-    /// <returns></returns>
-    public string BindRequestRoadWay(string orderNo, string palletNo, decimal qty, string type, string skuNo, string lotNo, string lotText, string supplierLot, List<WcsBoxInfo> detail,
-        string startLocat, string taskModel, string ceng, ref string endLocat, ref string taskNo)
-    {
-        string returnStr = "";
-
-        var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo);
-        if (task == null)
-        {
-            var model = new BoxPalletBindVm()
-            {
-                OrderCode = "",//鏆傛棤涓婃父绯荤粺缂栧彿
-                AsnNo = orderNo,
-                AsnDetailNo = 0,//鏆傛棤鍏ュ簱鍗曟槑缁嗙紪鍙凤紝WMS鏍规嵁鐗╂枡鎵规鏌ユ壘
-                PalletNo = palletNo,
-                Qty = qty,
-                Type = type,
-                SkuNo = skuNo,
-                LotNo = lotNo,
-                LotText = lotText,
-                SupplierLot = supplierLot,
-                Detail = detail
-            };
-            string url = Urls.WMSAddress + ":" + Urls.WMSPort;
-            var result = (url + "/api/DownAPi/BindRequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
-            Log.Information("璋冪敤WMS鎺ュ彛鍙嶉浠诲姟鎺ュ彛" + result.ToJson());
-            if (result.Success == 0)
-            {
-                var taskAdd = new WcsTask()
-                {
-                    TaskType = TaskTypeEnum.In,
-                    Status = TaskStatusEnum.Wait,
-                    Origin = "WMS",
-                    StartLocate = startLocat,
-                    PalletNo = palletNo,
-                    TaskNo = result.TaskList.TaskNo,
-                    EndLocate = result.TaskList.EndLocate,
-                    EndRoadway = result.TaskList.EndRoadway
-                };
-
-                _db.Insertable(taskAdd).ExecuteCommand();
-                endLocat = result.TaskList.EndRoadway;
-                returnStr = result.TaskList.EndLocate;
-            }
-            else
-            {
-                returnStr = "-1:" + result.Message;
-                return returnStr;
-            }
-        }
-        else
-        {
-            returnStr = task.EndLocate;
-            endLocat = task.EndRoadway;
-            taskNo = task.TaskNo;
-        }
-
-        endLocat = PLCCommon.RoadwayToStationNum(endLocat, ceng);
-
-        return returnStr;
-    }
     /// <summary>
     /// 璋冪敤WMS鎺ュ彛鐢宠鍌ㄤ綅鎺ュ彛
     /// </summary>
     /// <param name="palletNo"></param>
-    /// <param name="startLocat"></param>
-    /// <param name="taskModel"></param>
-    /// <param name="starRoadWay"></param>
+    /// <param name="taskId"></param>
     /// <param name="taskNo"></param>
     /// <returns></returns>
-    public string RequestLocate(string palletNo, string startLocat, string taskModel, string starRoadWay, ref string taskNo)
+    public string RequestLocate(string palletNo, int taskId,ref string taskNo)
     {
         string returnStr = "";
-
-
+        
         var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false
         && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)
-        && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo && !string.IsNullOrWhiteSpace(m.EndLocate));
+        && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo && m.TaskId == taskId);
 
-        if (task == null)
+        if (task != null)
         {
             var model = new RequestAsnTask()
             {
                 PalletNo = palletNo,
                 HouseNo = "W01",
-                RoadWayNo = starRoadWay,
-                TaskModel = taskModel
+                RoadWayNo = task.EndRoadway,
             };
-
+             
             string url = Urls.WMSAddress + ":" + Urls.WMSPort;
-            var result = (url + "/api/DownAPi/RequestLocation").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
+            var result = (url + "/api/DownAPi/RequestMiJiLocation").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result;
             Log.Information("璋冪敤WMS鐢宠鍌ㄤ綅鎺ュ彛鍙嶉浠诲姟鎺ュ彛" + result.ToJson());
             if (result.Success == 0)
             {
-                var taskUp = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.TaskNo == result.TaskList.TaskNo);
-                if (taskUp == null)
-                {
-                    var taskAdd = new WcsTask()
-                    {
-                        TaskNo = result.TaskList.TaskNo,
-                        TaskType = TaskTypeEnum.In,
-                        Status = TaskStatusEnum.Wait,
-                        //IsSuccess =TaskSuccessEnum.Success,
-                        Origin = "WMS",
-                        StartLocate = startLocat,
-                        PalletNo = palletNo,
-                        EndLocate = result.TaskList.EndLocate,
-                        EndRoadway = result.TaskList.EndRoadway
-                    };
-                    _db.Insertable(taskAdd).ExecuteCommand();
-                    HubUtil.PublicTask(taskAdd.Adapt<WcsTaskOutput>());
-                }
-                else
-                {
-                    taskUp.EndRoadway = result.TaskList.EndRoadway;
-                    taskUp.EndLocate = result.TaskList.EndLocate;
-                    _db.Updateable(taskUp).ExecuteCommand();
-                    HubUtil.PublicTask(taskUp.Adapt<WcsTaskOutput>());
-                }
-
-
+                task.Status = TaskStatusEnum.Wait; 
+                task.Type = PLCTypeEnum.ShuttleCar;
+                task.EndLocate = result.TaskList.EndLocate;
+                _db.Updateable(task).ExecuteCommand();
+                HubUtil.PublicTask(task.Adapt<WcsTaskOutput>());
+                
                 returnStr = result.TaskList.EndLocate;
                 taskNo = result.TaskList.TaskNo;
             }
@@ -224,8 +153,7 @@
         }
         else
         {
-            returnStr = task.EndLocate;
-            taskNo = task.TaskNo;
+            returnStr = "-1:娌℃湁鎵惧埌浠诲姟";
         }
 
         return returnStr;
@@ -394,15 +322,76 @@
     /// </summary>
     /// <param name="mod"></param>
     /// <returns></returns>
-    public async Task<AgvResponse> GenAgvSchedulingTask(AgvTaskInput mod)
+    public async Task<ResponseAgvDto> GenAgvSendTask(AgvTaskSend mod)
     {
-        string url = Urls.RCSAddress + ":" + Urls.RCSPort;
-        var result = await (url + "/rcms/services/rest/hikRpcService/genAgvSchedulingTask").SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync<AgvResponse>();
+        string url = Urls.RCSAddress + "/rcs/rtas/api/robot/controller/task/submit";
+        var requestId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
+        var dic = new Dictionary<string, string>()
+        {
+            {"X-lr-request-id",requestId },
+            {"X-lr-version","4.2" },
+        };
+
+        var result = await url.SetHeaders(dic).SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync<ResponseAgvDto>();
         Log.Information("璋冪敤AGV灏忚溅鎺ュ彛涓嬪彂浠诲姟" + result.ToJson());
         return result;
     }
 
     /// <summary>
+    /// 璋冪敤AGV灏忚溅鎺ュ彛缁х画鎵ц浠诲姟
+    /// </summary>
+    /// <param name="taskNo">浠诲姟鍙�</param>
+    /// <returns></returns>
+    public async Task<ResponseAgvDto> GenAgvContinueTask(string taskNo)
+    {
+        
+
+        string url = Urls.RCSAddress + "/rcs/rtas/api/robot/controller/task/continue";
+        var requestId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
+        var dic = new Dictionary<string, object>()
+        {
+            {"X-lr-request-id","123456879" },
+            {"X-lr-version","4.2" },
+        };
+        var mod = new
+        {
+            robotTaskCode = taskNo
+        };
+
+        var result = await url.SetHeaders(dic).SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync<ResponseAgvDto>();
+        Log.Information("璋冪敤AGV灏忚溅鎺ュ彛缁х画鎵ц浠诲姟" + result.ToJson());
+        return null;
+    }
+
+    /// <summary>
+    /// 璋冪敤AGV灏忚溅鎺ュ彛 杞藉叿锛堟墭鐩橈級涓庣珯鐐癸紙鍌ㄤ綅锛夎В缁戝畾鎺ュ彛
+    /// </summary>
+    /// <param name="palletNo">鎵樼洏鍙�</param>
+    /// <param name="locateNo">鍌ㄤ綅鍙�</param>
+    /// <returns></returns>
+    public async Task<ResponseAgvDto> GenAgvUnbind(string palletNo,string locateNo)
+    {
+
+
+        string url = Urls.RCSAddress + "/rcs/rtas/api/robot/controller/carrier/unbind";
+        var requestId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
+        var dic = new Dictionary<string, string>()
+        {
+            {"X-lr-request-id",requestId },
+            {"X-lr-version","4.2" },
+        };
+        var mod = new
+        {
+            carrierCode = palletNo,
+            siteCode = locateNo
+        };
+         
+        var result = await url.SetHeaders(dic).SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync<ResponseAgvDto>();
+        Log.Information("璋冪敤AGV灏忚溅鎺ュ彛缁х画鎵ц浠诲姟" + result.ToJson());
+        return result;
+    }
+
+    /// <summary>
     /// 璋冪敤AGV灏忚溅鎺ュ彛鍙嶉寮�闂ㄦ垚鍔�
     /// </summary>
     /// <param name="mod"></param>

--
Gitblit v1.8.0