using DocumentFormat.OpenXml.EMMA; using DocumentFormat.OpenXml.Vml.Office; using Elastic.Clients.Elasticsearch; using Furion.Logging; using Furion.RemoteRequest.Extensions; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using System.Text; using WCS.Application.Entity; 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); public HttpService() { var _sysConfigService = App.GetService();//todo 这里需要测试下生命周期问题 Urls = _sysConfigService.GetSystemInfo().Result; } /// /// 调用WMS接口申请巷道接口 /// /// /// /// /// /// /// /// public string RequestRoadWay(string palletNo, string startLocat, string taskModel, string ceng, ref string endLocat, 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); if (task == null) { var model = new RequestAsnTask() { PalletNo = palletNo, HouseNo = "W01", TaskModel = taskModel }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/RequestRoadWay").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, Origin = "WMS", StartLocate = startLocat, PalletNo = palletNo, TaskNo = result.TaskList.TaskNo, Levels = 999, EndLocate = result.TaskList.EndLocate, EndRoadway = result.TaskList.EndRoadway }; _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, ceng); return returnStr; } /// /// 调用WMS接口自动码垛绑定信息返回巷道口 /// /// public string BindRequestRoadWay(string orderNo, string palletNo, decimal qty, string type, string skuNo, string lotNo, string lotText, string supplierLot, List detail, string startLocat, string taskModel, string ceng, ref string endLocat, 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); 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().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; taskNo = result.TaskList.TaskNo; } else { returnStr = "-1:" + result.Message; return returnStr; } } else { returnStr = task.EndLocate; endLocat = task.EndRoadway; taskNo = task.TaskNo; } endLocat = PLCCommon.RoadwayToStationNum(endLocat, ceng); return returnStr; } /// /// 调用WMS接口申请储位接口 /// /// /// /// /// /// /// public string RequestLocate(string palletNo, string startLocat, string taskModel, string starRoadWay, 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 && !string.IsNullOrWhiteSpace(m.EndLocate)); if (task == null) { var model = new RequestAsnTask() { PalletNo = palletNo, HouseNo = "W01", RoadWayNo = starRoadWay, TaskModel = taskModel }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/RequestLocation").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS申请储位接口反馈任务接口" + result.ToJson()); if (result.Success == 0) { var taskUp = _db.Queryable().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()); } else { taskUp.EndRoadway = result.TaskList.EndRoadway; taskUp.EndLocate = result.TaskList.EndLocate; _db.Updateable(taskUp).ExecuteCommand(); HubUtil.PublicTask(taskUp.Adapt()); } returnStr = result.TaskList.EndLocate; taskNo = result.TaskList.TaskNo; } else { returnStr = "-1:" + result.Message; return returnStr; } } else { returnStr = task.EndLocate; taskNo = task.TaskNo; } 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 RequestEmptyException(TaskRequest model) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; //string TaskType = ""; //string TaskStatus = ""; //var PalletNo = ""; //var TaskNo = ""; var str = new { PalletNo = model.PalletNo, TaskNo = model.TaskNo, TaskType = model.TaskType.ToString(), TaskStatus = model.TaskStatus.ToString(), }; var result = await (url + "/api/DownAPi/EmptyException").SetBody(str, "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 str = new { PalletNo = model.PalletNo, TaskNo = model.TaskNo, TaskType = model.TaskType.ToString(), TaskStatus = model.TaskStatus.ToString(), }; var result = await (url + "/api/DownAPi/FullException").SetBody(str, "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 string BindPlnInHouseWcs(string Qty, string palletNo) { string returnStr = ""; var model = new BindPalletModel() { BindType = "1",//申请类型 Qty = int.Parse(Qty),//叠托机跺托盘数 PalletNo = palletNo,//托盘号 }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/BindPlnInHouseWcs").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈任务接口" + result.ToJson()); if (result.Success == 0) { returnStr = result.TaskList.ToString(); } else { returnStr = "-1:" + result.Message; return returnStr; } return returnStr; } /// /// 调用WMS接口反馈申请缠膜接口 /// /// 托盘号 /// public string RequestPackWcs(string PalletNo) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var str = new PackModel() { PalletNo = PalletNo }; var result = (url + "/api/DownAPi/RequestPackWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈申请缠膜异常接口" + result.ToJson()); return result.Success.ToString(); } /// /// 调用WMS接口反馈拆膜异常接口 /// /// 托盘号 /// public string RequestUnPackWcs(string palletno) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var str = new { PalletNo = palletno }; var result = (url + "/api/DownAPi/RequestUnPackWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈拆膜异常接口" + result.ToJson()); return result.Success.ToString(); } /// /// 调用WMS接口反馈缠膜完成 /// /// 托盘号 /// public string RequestPackedWcs(string palletno) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var str = new { PalletNo = palletno }; var result = (url + "/api/DownAPi/RequestPackedWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈缠膜完成异常接口" + result.ToJson()); return result.Success.ToString(); } /// /// 调用WMS接口反馈拆垛托盘信息 /// /// 托盘号 /// 任务号 /// public RequestBoxInfoCheckAll RequestBoxCheckinfo(string palletno,string taskno) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var str = new { PalletNo = palletno, TaskNo = taskno }; var result = (url + "/api/DownAPi/ResultBoxInfoCheckWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈拆托托盘信息异常接口" + result.ToJson()); return result; } /// /// 调用WMS接口反馈分拣出库箱信息 /// /// 托盘号 /// 任务号 /// public IsBaleModel2 RequestBoxno(string palletno) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var str = new { PalletNo = palletno, }; var result = (url + "/api/DownAPi/RequestBoxno").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈缠膜完成异常接口" + result.ToJson()); return result; } /// /// 调用WMS接口验证箱码是否可拣货并返回装车口 /// /// 箱码 /// public RequestloadingAddre ResultBoxInfoExportWcs(string boxNo) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var str = new { BoxNo = boxNo }; var result = (url + "/api/DownAPi/ResultBoxInfoCheckWcs").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口验证箱码是否可拣货并返回装车口:" + result.ToJson()); return result; } /// /// 调用WMS接口反馈AGV可放信号 /// /// 任务号 /// 工位号 /// public string RequesContinueAgv(string taskno,string port) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var str = new { TaskNo = taskno, Port = port }; var result = (url + "/api/DownAPi/AgcontinueTask").SetBody(str, "application/json", Encoding.UTF8).PostAsAsync().Result; Log.Information("调用WMS接口反馈拆膜异常接口" + result.ToJson()); return result.Success.ToString(); } }