| | |
| | | using Elastic.Clients.Elasticsearch; |
| | | using Furion.Logging; |
| | | using Furion.RemoteRequest.Extensions; |
| | | using NetTaste; |
| | | using Newtonsoft.Json; |
| | | using System.Text; |
| | | using WCS.Application.Entity; |
| | |
| | | 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); |
| | |
| | | /// <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, string taskModel, string ceng, ref string endLocat, ref string taskNo, int palletHeight) |
| | | { |
| | | string returnStr = ""; |
| | | 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); |
| | | 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 |
| | | }; |
| | | |
| | | 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 RequestAsnTask() |
| | | var model = new BoxPalletBindVm() |
| | | { |
| | | OrderCode = "",//暂无上游系统编号 |
| | | AsnNo = orderNo, |
| | | AsnDetailNo = 0,//暂无入库单明细编号,WMS根据物料批次查找 |
| | | PalletNo = palletNo, |
| | | HouseNo = "W01", |
| | | TaskModel = taskModel |
| | | 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/RequestRoadWay").SetBody(model, "application/json", Encoding.UTF8).PostAsAsync<ResponseTasks>().Result; |
| | | Log.Information("调用WMS接口反馈任务接口" + result.ToJson()); |
| | | 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, |
| | |
| | | TaskNo = result.TaskList.TaskNo, |
| | | Levels = 999, |
| | | 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> |
| | | /// <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 |
| | | EndRoadway = result.TaskList.EndRoadway, |
| | | PalletQty = palletHeight//托盘高度 |
| | | }; |
| | | |
| | | _db.Insertable(taskAdd).ExecuteCommand(); |
| | | endLocat = result.TaskList.EndRoadway; |
| | | returnStr = result.TaskList.EndLocate; |
| | | taskNo = taskAdd.TaskNo; |
| | | } |
| | | else |
| | | { |
| | |
| | | /// <param name="starRoadWay"></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, string startLocat, string taskModel, string starRoadWay, ref string taskNo, int palletHeight) |
| | | { |
| | | string returnStr = ""; |
| | | |
| | |
| | | PalletNo = palletNo, |
| | | HouseNo = "W01", |
| | | RoadWayNo = starRoadWay, |
| | | TaskModel = taskModel |
| | | TaskModel = taskModel, |
| | | PalletHeight = palletHeight |
| | | }; |
| | | |
| | | string url = Urls.WMSAddress + ":" + Urls.WMSPort; |
| | |
| | | //IsSuccess =TaskSuccessEnum.Success, |
| | | Origin = "WMS", |
| | | StartLocate = startLocat, |
| | | Levels = 999, |
| | | PalletNo = palletNo, |
| | | EndLocate = result.TaskList.EndLocate, |
| | | EndRoadway = result.TaskList.EndRoadway |
| | |
| | | StartLocate = item.StartLocate, |
| | | StartRoadway=item.StartRoadway, |
| | | PalletNo = item.PalletNo, |
| | | Levels = 999, |
| | | EndLocate = item.EndLocate, |
| | | EndRoadway = item.EndRoadway |
| | | }; |
| | |
| | | } |
| | | 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; |
| | | } |
| | | } |