using DocumentFormat.OpenXml.EMMA; using Elastic.Clients.Elasticsearch; using Furion.Logging; using Furion.RemoteRequest.Extensions; using NetTaste; using Newtonsoft.Json; using System.Text; using WCS.Application.Entity; using static SKIT.FlurlHttpClient.Wechat.Api.Models.ComponentTCBBatchCreateContainerServiceVersionResponse.Types; namespace WCS.Application; public class HttpService { private static readonly object OLock = new object(); private dynamic Urls; private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); public HttpService() { var _sysConfigService = App.GetService<SysConfigService>();//todo è¿™é‡Œéœ€è¦æµ‹è¯•下生命周期问题 Urls = _sysConfigService.GetSystemInfo().Result; } /// <summary> /// 调用WMS接å£ç”³è¯·å··é“æŽ¥å£ /// </summary> /// <param name="palletNo"></param> /// <param name="startLocat"></param> /// <param name="taskModel"></param> /// <param name="ceng"></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, int palletHeight) { Log.Information("调用WMS接å£å馈任务接å£-是å¦é‡å¤ç”³è¯·ï¼š" + palletNo); lock (OLock) { 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 RequestAsnTask() { PalletNo = palletNo, HouseNo = "W01", TaskModel = taskModel, PalletHeight = palletHeight, StartLocat = startLocat }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/RequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result; if (result == null) { returnStr = "-1:调用WMS接å£å¤±è´¥"; return returnStr; } 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, PalletQty = palletHeight//托盘高度 }; _db.Insertable(taskAdd).ExecuteCommand(); endLocat = result.TaskList.EndRoadway; returnStr = result.TaskList.EndLocate; taskNo = taskAdd.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; } } /// <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, int palletHeight) { 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, PalletHeight = palletHeight, Detail = detail }; Log.Information("调用WMS自动ç 垛接å£--请求报文:" + model.ToJson()); 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) { if (result.TaskList == null) { returnStr = $"-1:å‘WMS申请组托入库失败"; return returnStr; } 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, PalletQty = palletHeight//托盘高度 }; _db.Insertable(taskAdd).ExecuteCommand(); endLocat = result.TaskList.EndRoadway; returnStr = result.TaskList.EndLocate; taskNo = taskAdd.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; } /// <summary> /// 调用WMS接å£ç”³è¯·å‚¨ä½æŽ¥å£ /// </summary> /// <param name="palletNo"></param> /// <param name="startLocat"></param> /// <param name="taskModel"></param> /// <param name="starRoadWay"></param> /// <param name="taskNo"></param> /// <returns></returns> public string RequestLocate(string palletNo, string startLocat, string taskModel, string starRoadWay, ref string taskNo, int palletHeight) { 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)); if (task == null) { var model = new RequestAsnTask() { PalletNo = palletNo, HouseNo = "W01", RoadWayNo = starRoadWay, TaskModel = taskModel, PalletHeight = palletHeight }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/RequestLocation").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, Levels = 999, 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>()); } returnStr = result.TaskList.EndLocate; taskNo = result.TaskList.TaskNo; } else { returnStr = "-1:" + result.Message; return returnStr; } } else { returnStr = task.EndLocate; taskNo = task.TaskNo; } return returnStr; } /// <summary> /// 调用WMSæŽ¥å£ åé¦ˆä»»åŠ¡æŽ¥å£ /// </summary> /// <param name="model">任务完æˆçжæ€</param> /// <returns></returns> public async Task<ResponseModel> RequestTask(TaskRequestWMS model) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/ReceiveWcsSignal").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseModel>(); Log.Information("调用WMS接å£å馈任务接å£" + result.ToJson()); return result; } /// <summary> /// 调用WMS接å£å馈空å–å¼‚å¸¸æŽ¥å£ /// </summary> /// <param name="model">任务信æ¯</param> /// <returns></returns> public async Task<ResponseTasks> RequestEmptyException(TaskRequest model) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/EmptyException").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>(); Log.Information("调用WMS接å£å馈空å–异常接å£" + result.ToJson()); return result; } /// <summary> /// 调用WMS接å£å馈满å–å¼‚å¸¸æŽ¥å£ /// </summary> /// <param name="model">任务信æ¯</param> /// <returns></returns> public async Task<ResponseTasks> RequestFullException(TaskRequest model) { string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/FullException").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>(); Log.Information("调用WMS接å£å馈满å–异常接å£" + result.ToJson()); return result; } /// <summary> /// 调用WMS接å£ç”³è¯·ç©ºæ‰˜è·ºå‡ºåº“ /// </summary> /// <param name="Num"></param> /// <param name="OutMode"></param> /// <returns></returns> 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<ResponseOutPallet>().Result; Log.Information("调用WMS接å£å馈任务接å£" + result.ToJson()); if (result.Success == 0) { foreach (var item in result.TaskList) { var taskUp = _db.Queryable<WcsTask>().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, Levels = 999, EndLocate = item.EndLocate, EndRoadway = item.EndRoadway }; _db.Insertable(taskAdd).ExecuteCommand(); HubUtil.PublicTask(taskAdd.Adapt<WcsTaskOutput>()); } else { taskUp.EndRoadway = item.EndRoadway; taskUp.EndLocate = item.EndLocate; _db.Updateable(taskUp).ExecuteCommand(); HubUtil.PublicTask(taskUp.Adapt<WcsTaskOutput>()); } } } else { returnStr = "-1:" + result.Message; return returnStr; } return returnStr; } /// <summary> /// 调用WMS接å£ç»™å°è½¦ä¸‹å‘入库任务 /// </summary> /// <param name="endLocation"></param> /// <returns></returns> public async Task<ResponseModel> IssuedAgvTask(string endLocation) { var model = new { EndLocation = endLocation }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/WcsIssuedAgvTask").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseModel>(); Log.Information("调用WMS接å£WCS申请给å°è½¦ä¸‹å‘入库任务接å£" + result.ToJson()); return result; } /// <summary> /// æ ¹æ®å‡ºåº“任务å·èŽ·å–出库å•类型 /// </summary> /// <param name="endLocation"></param> /// <returns></returns> public async Task<ResponseModel> GetSoOrderTypeByTaskNo(string taskNo) { var model = new { TaskNo = taskNo }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = await (url + "/api/DownAPi/GetSoOrderTypeByTaskNo").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseModel>(); Log.Information("调用WMSæŽ¥å£æ ¹æ®å‡ºåº“任务å·èŽ·å–出库å•类型" + result.ToJson()); return result; } /// <summary> /// æ ¹æ®æ‰˜ç›˜å·èŽ·å–æ‰˜ç›˜ä¸Šç‰©æ–™å“ç§ä¿¡æ¯ /// </summary> /// <param name="palletNo">托盘å·</param> /// <returns></returns> public string GetPalletPzNo(string palletNo) { var model = new { PalletNo = palletNo }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/GetStockDetailByPalletNo").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseSkuInfo>().Result; Log.Information("调用WMSæŽ¥å£æ ¹æ®æ‰˜ç›˜å·èŽ·å–æ‰˜ç›˜åº“å˜æ˜Žç»†ä¿¡æ¯" + result.ToJson()); string pzNo = string.Empty; if (result.Success == 0) { var palletSkuInfo = result.PalletSkuInfo; var pzInfo = _db.Queryable<WcsMateialPzInfo>().First(w => w.SkuNo == palletSkuInfo.SkuNo && w.SkuName == palletSkuInfo.SkuName); if (pzInfo != null) { pzNo = pzInfo.PZNo; } } return pzNo; } /// <summary> /// æˆå“ç®±ç æ‹†åž›æ‹£è´§ /// </summary> /// <param name="taskNo"></param> /// <returns></returns> public string BoxUnstackd(string palletNo) { string returnStr = ""; var model = new { PalletNo = palletNo }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/BoxUnstackd").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<WmsResponseModel>().Result; Log.Information("调用WMSæŽ¥å£æˆå“ç®±ç æ‹†åž›æ‹£è´§" + result.ToJson()); if (result.Success != 0) { returnStr = "-1:" + result.Message; } return returnStr; } /// <summary> /// å æ‰˜æœºç”³è¯·ç©ºæ‰˜è·ºç»‘定 /// </summary> /// <param name="palletNo"></param> /// <returns></returns> public string BindNullPalletWcs(int qty,string palletNo) { string returnStr = ""; var model = new { PalletNo = palletNo, Qty = qty, }; string url = Urls.WMSAddress + ":" + Urls.WMSPort; var result = (url + "/api/DownAPi/BindNullPalletWcs").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseSkuInfo>().Result; Log.Information("调用WMS接å£å 托机绑定空托跺" + result.ToJson()); if (result.Success != 0) { returnStr = "-1:" + result.Message; } return returnStr; } }