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