using DocumentFormat.OpenXml.EMMA; using Elastic.Clients.Elasticsearch; 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; public class HttpService { private dynamic Urls; private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); private static Dictionary dicConverCar = new Dictionary(); public HttpService() { var _sysConfigService = App.GetService(); Urls = _sysConfigService.GetSystemInfo().Result; dicConverCar = new Dictionary { {"013","190601"}, {"014","191201"}, {"015","190602"}, {"016","191202"}, {"002","030401"}, {"006","030402"}, {"003","030601"}, {"007","030602"}, {"005","031201"}, {"008","031202"}, }; } /// /// 调用WMS接口申请叠托机空托入库接口 /// /// /// public string RequestLiKuPallet(NullPallInRequest model) { string returnStr = ""; var task = _db.Queryable().First(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.TaskType == TaskTypeEnum.In && m.PalletNo == model.PalletNo); if (task == null) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/RequestPalletIn").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈空托入库任务接口" + result.ToJson()); if (result.Success == 0) { var taskAdd = new WcsTask() { TaskType = TaskTypeEnum.In, Status = TaskStatusEnum.Wait, Type = PLCTypeEnum.ConveyorLine, Origin = "WMS", PalletNo = model.PalletNo, TaskNo = result.TaskList.TaskNo, Levels = 999, StartLocate = model.Locate, StartRoadway = result.TaskList.StartRoadway, EndLocate = result.TaskList.EndLocate, EndRoadway = result.TaskList.EndRoadway, TaskId = FourWayCarUtil.GetTaskId() }; _db.Insertable(taskAdd).ExecuteCommand(); returnStr = result.TaskList.EndLocate; } else { returnStr = "-1:" + result.Message; return returnStr; } } else { returnStr = task.EndLocate; } return returnStr; } /// /// 调用WMS接口申请巷道接口 /// /// /// /// /// /// 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().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 RequestAsnTask() { PalletNo = palletNo, HouseNo = "W01" }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/RequestMiJiRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈任务接口" + result.ToJson()); if (result.Success == 0) { var taskAdd = new WcsTask() { TaskType = TaskTypeEnum.In, Status = TaskStatusEnum.Wait, Type = PLCTypeEnum.ConveyorLine, Origin = "WMS", StartLocate = startLocat, PalletNo = palletNo, TaskNo = result.TaskList.TaskNo, Levels = 999, EndLocate = result.TaskList.EndLocate, EndRoadway = result.TaskList.EndRoadway, TaskId = FourWayCarUtil.GetTaskId() }; var endLocat2 = PLCCommon.RoadwayToStationNum(taskAdd.EndRoadway, stationNum); taskAdd.StartRoadway = dicConverCar[endLocat2]; _db.Insertable(taskAdd).ExecuteCommand(); endLocat = result.TaskList.EndRoadway; taskNo = result.TaskList.TaskNo; 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, stationNum); return returnStr; } /// /// 调用WMS接口申请储位接口 /// /// /// /// /// public string RequestLocate(string palletNo, int taskId,ref string taskNo) { string returnStr = ""; var task = _db.Queryable().First(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.TaskType == TaskTypeEnum.In && m.PalletNo == palletNo && m.TaskId == taskId); if (task != null) { var model = new RequestAsnTask() { PalletNo = palletNo, HouseNo = "W01", RoadWayNo = task.EndRoadway, }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/RequestMiJiLocation").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS申请储位接口反馈任务接口" + result.ToJson()); if (result.Success == 0) { task.Status = TaskStatusEnum.Wait; task.Type = PLCTypeEnum.ShuttleCar; task.EndLocate = result.TaskList.EndLocate; _db.Updateable(task).ExecuteCommand(); HubUtil.PublicTask(task.Adapt()); returnStr = result.TaskList.EndLocate; taskNo = result.TaskList.TaskNo; } else { returnStr = "-1:" + result.Message; return returnStr; } } else { returnStr = "-1:没有找到任务"; } return returnStr; } /// /// 调用WMS接口 反馈任务接口 /// /// 任务完成状态 /// public async Task RequestTask(TaskRequestWMS model) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/ReceiveWcsSignal").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用WMS接口反馈任务接口" + result.ToJson()); return result; } /// /// 调用WMS接口 反馈任务取货完成接口 /// /// 任务完成状态 /// public async Task RequestTaskQh(TaskRequestWMS model) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/UpLocateByAgvOut").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用WMS接口-反馈任务取货完成接口" + result.ToJson()); return result; } /// /// 调用WMS接口反馈空取异常接口 /// /// 任务信息 /// public async Task RequestEmptyException(TaskRequest model) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/EmptyException").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用WMS接口反馈空取异常接口" + result.ToJson()); return result; } /// /// 调用WMS接口反馈满取异常接口 /// /// 任务信息 /// public async Task RequestFullException(TaskRequest model) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/FullException").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用WMS接口反馈满取异常接口" + result.ToJson()); return result; } /// /// 调用WMS接口申请空托跺出库 /// /// /// /// public string IssuePlnOutHouseWcs(string Num, string OutMode) { string returnStr = ""; var model = new OutPalletModel() { Num = Num,//出库跺数 OutMode = OutMode//出库口 }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/IssuePlnOutHouseWcs").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈任务接口" + result.ToJson()); if (result.Success == 0) { foreach (var item in result.TaskList) { var taskUp = _db.Queryable().First(m => m.IsDelete == false && m.TaskNo == item.TaskNo); if (taskUp == null) { var taskAdd = new WcsTask() { TaskNo = item.TaskNo, TaskType = (TaskTypeEnum)(int.Parse(item.TaskType)), Status = TaskStatusEnum.Wait, //IsSuccess =TaskSuccessEnum.Success, Origin = "WMS", StartLocate = item.StartLocate, StartRoadway = item.StartRoadway, PalletNo = item.PalletNo, EndLocate = item.EndLocate, EndRoadway = item.EndRoadway }; _db.Insertable(taskAdd).ExecuteCommand(); HubUtil.PublicTask(taskAdd.Adapt()); } else { taskUp.EndRoadway = item.EndRoadway; taskUp.EndLocate = item.EndLocate; _db.Updateable(taskUp).ExecuteCommand(); HubUtil.PublicTask(taskUp.Adapt()); } } } else { returnStr = "-1:" + result.Message; return returnStr; } return returnStr; } /// /// 调用WMS接口申请巷道接口 /// /// /// public async Task RequestRoadway(string palletNo) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/RequestRoadway").SetBody(palletNo, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用WMS接口申请巷道接口" + result.ToJson()); return result; } /// /// 调用WMS接口申请工位接口 /// /// public async Task RequestStationNum(RequestStation mod) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/RequestStationNum").SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用WMS接口申请工位接口" + result.ToJson()); return result; } /// /// 调用WMS接口C口到A口完成回写 /// /// public async Task EditLogPalletTask(RequestStation mod) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/EditLogPalletTask").SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用WMS接口C口到A口完成回写" + result.ToJson()); return result; } /// /// 调用WMS接口申请2楼工位接口 /// /// public async Task RequestStationNum2(RequestStation mod) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/RequestStationNum2").SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用WMS接口申请工位接口" + result.ToJson()); return result; } /// /// 调用AGV小车接口下发任务 /// /// /// public async Task GenAgvSendTask(AgvTaskSend mod) { string url = Urls.RCSAddress + "/rcs/rtas/api/robot/controller/task/submit"; var requestId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); var dic = new Dictionary() { {"X-lr-request-id",requestId }, {"X-lr-version","4.2" }, }; var result = await url.SetHeaders(dic).SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用AGV小车接口下发任务" + result.ToJson()); return result; } /// /// 调用AGV小车接口继续执行任务 /// /// 任务号 /// public async Task GenAgvContinueTask(string taskNo) { string url = Urls.RCSAddress + "/rcs/rtas/api/robot/controller/task/continue"; var requestId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); var dic = new Dictionary() { {"X-lr-request-id",requestId }, {"X-lr-version","4.2" }, }; var mod = new { robotTaskCode = taskNo }; var result = await url.SetHeaders(dic).SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用AGV小车接口继续执行任务" + result.ToJson()); return null; } /// /// 调用AGV小车接口 载具(托盘)与站点(储位)解绑定接口 /// /// 托盘号 /// 储位号 /// public async Task 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() { {"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(); Log.Information("调用AGV小车接口继续执行任务" + result.ToJson()); return result; } /// /// 调用AGV小车接口反馈开门成功 /// /// /// public async Task NotifyExcuteResultInfo(AgvNotifyInput mod) { string url = Urls.RCSAddress + ":" + Urls.RCSPort; var result = await (url + "/rcms/services/rest/liftCtlService/notifyExcuteResultInfo").SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用AGV小车接口反馈开门成功" + result.ToJson()); return result; } /// /// 调用AGV小车接口取消任务 /// /// /// /// public async Task CancelTask(CancelTaskModel mod) { string url = Urls.RCSAddress + ":" + Urls.RCSPort; var result = await (url + "/rcms/services/rest/hikRpcService/cancelTask").SetBody(mod, "application/json", Encoding.UTF8).PostAsAsync(); Log.Information("调用AGV小车接口取消任务" + result.ToJson()); return result; } }