diff --git a/Common/AgvHelper.cs b/Common/AgvHelper.cs index 7040b18..5be02bc 100644 --- a/Common/AgvHelper.cs +++ b/Common/AgvHelper.cs @@ -1,4 +1,5 @@ using Epost.Model; +using NPOI.POIFS.Crypt.Dsig; using System; using System.Collections.Generic; using System.Configuration; @@ -10,7 +11,7 @@ namespace Epost.Common { public class AgvHelper { - string agvUrl = ConfigurationManager.AppSettings["agvUrl"]; + string agvSchedulingTaskUrl = ConfigurationManager.AppSettings["agvSchedulingTaskUrl"]; HttpHelper http = new HttpHelper(); #region 生成任务单 public AgvResultModel genAgvSchedulingTask(AgvSchedulingTaskModel model) @@ -22,7 +23,7 @@ namespace Epost.Common string postData = JsonHelper.SerializeObject(model); LogHelper.WriteLogInfo("调用AGV生成任务单接口请求参数" + postData, LogHelper.Log_Type.INFO); - string res = http.HttpPost_Old(agvUrl, postData); + string res = http.HttpPost_Old(agvSchedulingTaskUrl, postData); LogHelper.WriteLogInfo("调用AGV生成任务单接口返回" + res, LogHelper.Log_Type.INFO); if (!string.IsNullOrEmpty(res)) { @@ -41,7 +42,8 @@ namespace Epost.Common { LogHelper.WriteLogInfo("调用AGV生成任务单接口返回失败", LogHelper.Log_Type.ERROR); } - + string resinfo = JsonHelper.SerializeObject(resmodel); + return resmodel; } catch (Exception ex) diff --git a/Epost.Model/AgvReqModel.cs b/Epost.Model/AgvReqModel.cs index a2caf12..80cc52c 100644 --- a/Epost.Model/AgvReqModel.cs +++ b/Epost.Model/AgvReqModel.cs @@ -124,5 +124,51 @@ namespace Epost.Model } + #endregion + + #region 绑定解绑 + + public class bindCtnrAndBinReq + { + public string reqCode { get; set; } + public string reqTime { get; set; } + public string clientCode { get; set; } + public string tokenCode { get; set; } + public string ctnrCode { get; set; } + public string ctnrTyp { get; set; } + public string stgBinCode { get; set; } + public string positionCode { get; set; } + public string indBind { get; set; } + } + + public class bindCtnrAndBinResponse + { + public string code { get; set; } + public string data { get; set; } + public bool interrupt { get; set; } + public string reqCode { get; set; } + } + + #endregion + + #region 告警上报 + + public class warnCallbackReq + { + public string reqCode { get; set; } + public string reqTime { get; set; } + public string clientCode { get; set; } + public string tokenCode { get; set; } + public List data { get; set; } + } + + public class warnCallbackData +{ + public string robotCode { get; set; } + public string beginDate { get; set; } + public string warnContent { get; set; } + public string taskCode { get; set; } + } + #endregion } diff --git a/Epost.Model/TaskModel.cs b/Epost.Model/TaskModel.cs index 456c0d8..d172454 100644 --- a/Epost.Model/TaskModel.cs +++ b/Epost.Model/TaskModel.cs @@ -6,7 +6,9 @@ using System.Threading.Tasks; namespace Epost.Model { + #region 生成任务 + #endregion public class TaskModel { public TaskData data { get; set; } @@ -155,4 +157,64 @@ namespace Epost.Model } #endregion + + + #region 任务执行通知接口 + + public class wmsCallbackModel + { + public callback data { get; set; } + } + + public class callback + { + public List header { get; set; } + } + + public class callbackHeader + { + public string warehouseId { get; set; } + public string groupTaskId { get; set; } + public string wmsDocNo { get; set; } + public string reqCode { get; set; } + public string reqTime { get; set; } + public string method { get; set; } + public string currentPositionCode { get; set; } + public string robotCode { get; set; } + public string taskCode { get; set; } + } + + #endregion + + #region 告警 + + public class agvexTaskReq + { + public agvexTaskData data { get; set; } + } + + public class agvexTaskData + { + public List header { get; set; } + } + + public class agvexTaskHeader + { + public string reqCode { get; set; } + public string reqTime { get; set; } + public string clientCode { get; set; } + public string tokenCode { get; set; } + public string notes { get; set; } + public List list { get; set; } + } + + public class agvexTaskList + { + public string robotCode { get; set; } + public string taskCode { get; set; } + public string beginDate { get; set; } + public string warnContent { get; set; } + } + + #endregion } diff --git a/Epost.TestToolsWeb/Controllers/AgvTaskApiController.cs b/Epost.TestToolsWeb/Controllers/AgvTaskApiController.cs index 4662fa6..36eb758 100644 --- a/Epost.TestToolsWeb/Controllers/AgvTaskApiController.cs +++ b/Epost.TestToolsWeb/Controllers/AgvTaskApiController.cs @@ -4,51 +4,159 @@ 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")] + [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) + public AgvResultModel agvCallback([FromBody] agvCallbackModel data) { AgvResultModel retModel = new AgvResultModel(); try { - LogHelper.WriteLogInfo("请求报文" + JsonHelper.SerializeObject(data)); + LogHelper.WriteLogInfo("agvCallback请求报文" + JsonHelper.SerializeObject(data)); string state = string.Empty; if (data.method == "start") { state = "2";//任务开始启动 } - else if (data.method == "outbin") { + 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") { + else if (data.method == "cancel") + { state = "88"; } else { } - inboundBLL.UpInOrderListByAgvid(data.taskCode,state); - //ResultMessageModel data = new ResultMessageModel(); - //data.Parameter = model.reqCode; - //data.Status = model.method; - //data.Address = model.taskCode; - //JobCache.UpdateJobDownModelList(new List() { data }, EdownCommend.Create); + 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; @@ -60,7 +168,8 @@ namespace Epost.DPS.Controllers 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; } } diff --git a/Epost.TestToolsWeb/Controllers/TaskAPIController.cs b/Epost.TestToolsWeb/Controllers/TaskAPIController.cs index 50ae922..176b3cf 100644 --- a/Epost.TestToolsWeb/Controllers/TaskAPIController.cs +++ b/Epost.TestToolsWeb/Controllers/TaskAPIController.cs @@ -3,21 +3,27 @@ using Epost.Common; 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.Http; +using static System.Net.WebRequestMethods; namespace Epost.DPS.Controllers { - [RoutePrefix("api/TaskAPI")] + [RoutePrefix("api/TaskAPI")]//WMS=>WCS public class TaskAPIController : ApiController { InboundOrdersBLL inOrderBLL = new InboundOrdersBLL(); PalletinfoBLL palletBLL = new PalletinfoBLL(); Sys_operate_logBLL logBLL = new Sys_operate_logBLL(); - [Route("agvPutTask")] + + HttpHelper http = new HttpHelper(); + AgvHelper agv = new AgvHelper(); + string bindCtnrAndBinUrl = ConfigurationManager.AppSettings["bindCtnrAndBinUrl"]; + [Route("agvPutTask")]//WMS=>WCS生成任务接口 [HttpPost] public RetMesModel agvPutTask([FromBody] TaskModel model) { @@ -210,7 +216,7 @@ namespace Epost.DPS.Controllers - [Route("agvCancleTask")] + [Route("agvCancleTask")]//WMS=>WCS取消任务 [HttpPost] public RetMesModel agvCancleTask([FromBody]AgvCancleModel model) { @@ -237,10 +243,19 @@ namespace Epost.DPS.Controllers if (orderdt != null && orderdt.Rows.Count > 0) { - res.returnCode = "0000"; - res.returnDesc = "成功!"; - res.returnFlag = "1"; + bool bo= inOrderBLL.UpInOrderList(orderdt.Rows[0]["id"].ToString(), "88", ""); + if (bo) + { + res.returnCode = "0000"; + res.returnDesc = "成功!"; + res.returnFlag = "1"; + } + else { + res.returnCode = "0001"; + res.returnDesc = "取消失败!!"; + res.returnFlag = "0"; + } } else { @@ -268,13 +283,13 @@ namespace Epost.DPS.Controllers response.returnnode = res; retMes.Response = response; string resinfo = JsonHelper.SerializeObject(retMes) ; - logBLL.InsertLog("取消任务接口", "agvCancleTask", "/api/TaskAPI/agvCancleTask", JsonHelper.SerializeObject(model), resinfo, 0, res.returnDesc, DateTime.Now); + logBLL.InsertLog("WMS=>WCS取消任务接口", "agvCancleTask", "/api/TaskAPI/agvCancleTask", JsonHelper.SerializeObject(model), resinfo, 0, res.returnDesc, DateTime.Now); return retMes; } - [Route("agvBindPodAndBerth")] + [Route("agvBindPodAndBerth")]//WMS=>WCS绑定解绑 [HttpPost] public RetMesModel agvBindPodAndBerth([FromBody] agvBindPodModel model) { @@ -297,19 +312,44 @@ namespace Epost.DPS.Controllers } else { - + bindCtnrAndBinReq reqModel = new bindCtnrAndBinReq(); + reqModel.reqCode = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); + reqModel.ctnrTyp = "1";//agv提供 + reqModel.indBind = item.indBind; + string agvloc = inOrderBLL.GetLocation(" and wmsloc = '" + item.positionCode + "'"); + reqModel.stgBinCode = agvloc; + if (item.indBind == "1") + { + reqModel.ctnrCode = agvloc; + } + string reqstr = JsonHelper.SerializeObject(reqModel); + string resultStr = http.HttpPost_Old(bindCtnrAndBinUrl, reqstr); + //string resultStr = "{\"code\":\"0\",\"data\":\"\",\"interrupt\":false,\"reqCode\":\"66ee6\"}"; + logBLL.InsertLog("WCS->AGV绑定解绑", "bindCtnrAndBin", bindCtnrAndBinUrl, reqstr, resultStr, 0, "", DateTime.Now); + if (!string.IsNullOrEmpty(resultStr)) + { + bindCtnrAndBinResponse resModel = JsonHelper.DeserializeObject(resultStr); + if (resModel.code == "0") + { - res.returnCode = "0000"; - res.returnDesc = "成功!"; - res.returnFlag = "1"; + res.returnCode = "0000"; + res.returnDesc = "绑定/解绑成功!"; + res.returnFlag = "1"; + } + else + { + res.returnCode = "0000"; + res.returnDesc = "绑定/解绑失败!"; + res.returnFlag = "1"; + } + + } } - - } - } + } } catch (Exception ex) { @@ -322,7 +362,7 @@ namespace Epost.DPS.Controllers response.returnnode = res; retMes.Response = response; string resinfo = JsonHelper.SerializeObject(retMes); - logBLL.InsertLog("agv绑定解绑接口", "agvBindPodAndBerth", "/api/TaskAPI/agvBindPodAndBerth", JsonHelper.SerializeObject(model), resinfo, 0, res.returnDesc, DateTime.Now); + logBLL.InsertLog("WMS=>WCS绑定解绑接口", "agvBindPodAndBerth", "/api/TaskAPI/agvBindPodAndBerth", JsonHelper.SerializeObject(model), resinfo, 0, res.returnDesc, DateTime.Now); return retMes; } } diff --git a/Epost.TestToolsWeb/Epost.DPS.csproj.user b/Epost.TestToolsWeb/Epost.DPS.csproj.user index 425431a..2eaafac 100644 --- a/Epost.TestToolsWeb/Epost.DPS.csproj.user +++ b/Epost.TestToolsWeb/Epost.DPS.csproj.user @@ -11,7 +11,7 @@ False 600 E:\WORK\代码管理\T系列\播种\Epost.TestToolsWeb\Properties\PublishProfiles\Toolsweb.pubxml - Release|Any CPU + Debug|Any CPU @@ -21,5 +21,29 @@ ApiControllerEmptyScaffolder root/Common/Web API - + + + + + + + CurrentPage + True + False + False + False + + + + + + + + + True + False + + + + \ No newline at end of file diff --git a/Epost.TestToolsWeb/Global.asax.cs b/Epost.TestToolsWeb/Global.asax.cs index 9123d39..51954b4 100644 --- a/Epost.TestToolsWeb/Global.asax.cs +++ b/Epost.TestToolsWeb/Global.asax.cs @@ -21,8 +21,8 @@ namespace Epost.TestToolsWeb { public class MvcApplication : System.Web.HttpApplication { - InboundOrdersBLL inboundBLL = new InboundOrdersBLL(); - + InboundOrdersBLL inboundBLL = new InboundOrdersBLL(); + AgvHelper agv = new AgvHelper(); protected void Application_Start() { AreaRegistration.RegisterAllAreas(); @@ -43,7 +43,7 @@ namespace Epost.TestToolsWeb if (dt != null && dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { - AgvHelper agv = new AgvHelper(); + AgvSchedulingTaskModel reqmodel = new AgvSchedulingTaskModel(); reqmodel.reqCode =DateTime.Now.Month+DateTime.Now.Day+ row["id"].ToString();; List positionList = new List(); diff --git a/Epost.TestToolsWeb/Web.config b/Epost.TestToolsWeb/Web.config index 5c71a5c..2da493c 100644 --- a/Epost.TestToolsWeb/Web.config +++ b/Epost.TestToolsWeb/Web.config @@ -33,8 +33,13 @@ - + + + + + +