using Epost.BLL; using Epost.Common; using Epost.DAL.Cache; using Epost.Model; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Helpers; using System.Web.Http; using static System.Net.WebRequestMethods; namespace Epost.DPS.Controllers { [RoutePrefix("api/AgvTaskApi")]//agv=>WCS public class AgvTaskApiController : ApiController { Sys_operate_logBLL logBLL = new Sys_operate_logBLL(); InboundOrdersBLL inboundBLL = new InboundOrdersBLL(); string agvCallbackUrl = ConfigurationManager.AppSettings["agvCallbackUrl"]; string agvexTaskUrl = ConfigurationManager.AppSettings["agvexTaskUrl"]; HttpHelper http = new HttpHelper(); AgvHelper agv = new AgvHelper(); [Route("agvCallback")] [HttpPost] public AgvResultModel agvCallback([FromBody] agvCallbackModel data) { AgvResultModel retModel = new AgvResultModel(); try { LogHelper.WriteLogInfo("agvCallback请求报文" + JsonHelper.SerializeObject(data)); string state = string.Empty; if (data.method == "start") { state = "2";//任务开始启动 } else if (data.method == "outbin") { state = "3";//走出储位 } else if (data.method == "end") { state = "4"; //更新任务已完成 DataTable dt = inboundBLL.GetInOrderList(" and agvid ='" + data.taskCode + "'"); if (dt != null && dt.Rows.Count > 0) { wmsCallbackModel backModel = new wmsCallbackModel(); List list = new List(); callbackHeader headModel = new callbackHeader(); headModel.warehouseId = dt.Rows[0]["warehouseId"].ToString(); headModel.groupTaskId = dt.Rows[0]["groupTaskId"].ToString(); headModel.wmsDocNo = dt.Rows[0]["wmsDocNo"].ToString(); headModel.currentPositionCode = data.currentPositionCode; headModel.robotCode = data.robotCode; headModel.taskCode = data.taskCode; headModel.method = data.method; headModel.reqCode = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); headModel.reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); callback back = new callback(); list.Add(headModel); back.header = list; backModel.data = back; string reqstr = JsonHelper.SerializeObject(backModel); LogHelper.WriteLogInfo("WCS->WMS任务执行通知请求:" + reqstr + "===" + agvCallbackUrl); string resultStr = http.HttpPost_Old(agvCallbackUrl, reqstr); LogHelper.WriteLogInfo("WCS->WMS任务执行通知返回:" + resultStr); logBLL.InsertLog("WCS->WMS任务执行通知", "agvCallback", agvCallbackUrl, reqstr, resultStr, 0, "", DateTime.Now); //if (!string.IsNullOrEmpty(resultStr)) //{ // RetMesModel resModel = JsonHelper.DeserializeObject(resultStr); // if (resModel.Response.returnnode.returnCode == "0000") // { // LogHelper.WriteLogInfo("WCS->WMS任务执行通知成功"); // } // else { // LogHelper.WriteLogInfo("WCS->WMS任务执行通知失败"); // } //} } } else if (data.method == "cancel") { state = "88"; } else { } inboundBLL.UpInOrderListByAgvid(data.taskCode, state); retModel.message = "成功!"; retModel.code = "0"; retModel.reqCode = data.reqCode; } catch (Exception ex) { LogHelper.WriteLogInfo("agvCallback异常:" + ex.ToString(), LogHelper.Log_Type.ERROR); retModel.message = "请求接口异常!"; retModel.code = "-1"; retModel.reqCode = data.reqCode; } string resinfo = JsonHelper.SerializeObject(retModel); logBLL.InsertLog("AGV上报WCS", "agvCallback", "/api/AgvTaskApi/agvCallback", JsonHelper.SerializeObject(data), resinfo, 0, "", DateTime.Now); return retModel; } [Route("warnCallback")] [HttpPost] public AgvResultModel warnCallback([FromBody]warnCallbackReq data) { AgvResultModel retModel = new AgvResultModel(); try { LogHelper.WriteLogInfo("warnCallback请求报文" + JsonHelper.SerializeObject(data)); //DataTable dt = inboundBLL.GetInOrderList(" and agvid ='" + data.taskCode + "'"); //if (dt != null && dt.Rows.Count > 0) //{ agvexTaskReq backModel = new agvexTaskReq(); agvexTaskData taskdata = new agvexTaskData(); List taskList = new List(); agvexTaskHeader agvexHeader = new agvexTaskHeader(); List headerlist = new List(); List datalist = data.data; if (datalist.Any()) { foreach (warnCallbackData item in datalist) { agvexTaskList agvextmodel = new agvexTaskList(); agvextmodel.robotCode = item.robotCode; agvextmodel.taskCode = item.taskCode; agvextmodel.beginDate = item.beginDate; agvextmodel.warnContent = item.warnContent; taskList.Add(agvextmodel); } } agvexHeader.list = taskList; agvexHeader.clientCode = data.clientCode; agvexHeader.reqCode = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); agvexHeader.reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); headerlist.Add(agvexHeader); taskdata.header = headerlist; backModel.data = taskdata; string reqstr = JsonHelper.SerializeObject(backModel); LogHelper.WriteLogInfo("WCS->WMS告警通知请求:" + reqstr + "===" + agvexTaskUrl); string resultStr = http.HttpPost_Old(agvexTaskUrl, reqstr); LogHelper.WriteLogInfo("WCS->WMS告警通知返回:" + resultStr); logBLL.InsertLog("WCS->WMS告警通知", "warnCallback", agvexTaskUrl, reqstr, resultStr, 0, "", DateTime.Now); // } retModel.message = "成功!"; retModel.code = "0"; retModel.reqCode = data.reqCode; } catch (Exception ex) { LogHelper.WriteLogInfo("agvPutTask异常:" + ex.ToString(), LogHelper.Log_Type.ERROR); retModel.message = "请求接口异常!"; retModel.code = "-1"; retModel.reqCode = data.reqCode; } string resinfo = JsonHelper.SerializeObject(retModel); logBLL.InsertLog("AGV上报WCS", "agvCallback", "/api/AgvTaskApi/agvCallback", JsonHelper.SerializeObject(data), resinfo, 0, "", DateTime.Now); return retModel; } } }