This commit is contained in:
jl
2024-12-03 10:55:54 +08:00
parent 7bdb8633db
commit a867e6244c
8 changed files with 325 additions and 37 deletions

View File

@ -1,4 +1,5 @@
using Epost.Model; using Epost.Model;
using NPOI.POIFS.Crypt.Dsig;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Configuration; using System.Configuration;
@ -10,7 +11,7 @@ namespace Epost.Common
{ {
public class AgvHelper public class AgvHelper
{ {
string agvUrl = ConfigurationManager.AppSettings["agvUrl"]; string agvSchedulingTaskUrl = ConfigurationManager.AppSettings["agvSchedulingTaskUrl"];
HttpHelper http = new HttpHelper(); HttpHelper http = new HttpHelper();
#region #region
public AgvResultModel genAgvSchedulingTask(AgvSchedulingTaskModel model) public AgvResultModel genAgvSchedulingTask(AgvSchedulingTaskModel model)
@ -22,7 +23,7 @@ namespace Epost.Common
string postData = JsonHelper.SerializeObject(model); string postData = JsonHelper.SerializeObject(model);
LogHelper.WriteLogInfo("调用AGV生成任务单接口请求参数" + postData, LogHelper.Log_Type.INFO); 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); LogHelper.WriteLogInfo("调用AGV生成任务单接口返回" + res, LogHelper.Log_Type.INFO);
if (!string.IsNullOrEmpty(res)) if (!string.IsNullOrEmpty(res))
{ {
@ -41,7 +42,8 @@ namespace Epost.Common
{ {
LogHelper.WriteLogInfo("调用AGV生成任务单接口返回失败", LogHelper.Log_Type.ERROR); LogHelper.WriteLogInfo("调用AGV生成任务单接口返回失败", LogHelper.Log_Type.ERROR);
} }
string resinfo = JsonHelper.SerializeObject(resmodel);
return resmodel; return resmodel;
} }
catch (Exception ex) catch (Exception ex)

View File

@ -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<warnCallbackData> 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 #endregion
} }

View File

@ -6,7 +6,9 @@ using System.Threading.Tasks;
namespace Epost.Model namespace Epost.Model
{ {
#region
#endregion
public class TaskModel public class TaskModel
{ {
public TaskData data { get; set; } public TaskData data { get; set; }
@ -155,4 +157,64 @@ namespace Epost.Model
} }
#endregion #endregion
#region
public class wmsCallbackModel
{
public callback data { get; set; }
}
public class callback
{
public List<callbackHeader> 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<agvexTaskHeader> 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<agvexTaskList> 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
} }

View File

@ -4,51 +4,159 @@ using Epost.DAL.Cache;
using Epost.Model; using Epost.Model;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Web.Helpers; using System.Web.Helpers;
using System.Web.Http; using System.Web.Http;
using static System.Net.WebRequestMethods;
namespace Epost.DPS.Controllers namespace Epost.DPS.Controllers
{ {
[RoutePrefix("api/AgvTaskApi")] [RoutePrefix("api/AgvTaskApi")]//agv=>WCS
public class AgvTaskApiController : ApiController public class AgvTaskApiController : ApiController
{ {
Sys_operate_logBLL logBLL = new Sys_operate_logBLL();
InboundOrdersBLL inboundBLL = new InboundOrdersBLL(); InboundOrdersBLL inboundBLL = new InboundOrdersBLL();
string agvCallbackUrl = ConfigurationManager.AppSettings["agvCallbackUrl"];
string agvexTaskUrl = ConfigurationManager.AppSettings["agvexTaskUrl"];
HttpHelper http = new HttpHelper();
AgvHelper agv = new AgvHelper();
[Route("agvCallback")] [Route("agvCallback")]
[HttpPost] [HttpPost]
public AgvResultModel agvCallback([FromBody]agvCallbackModel data) public AgvResultModel agvCallback([FromBody] agvCallbackModel data)
{ {
AgvResultModel retModel = new AgvResultModel(); AgvResultModel retModel = new AgvResultModel();
try try
{ {
LogHelper.WriteLogInfo("请求报文" + JsonHelper.SerializeObject(data)); LogHelper.WriteLogInfo("agvCallback请求报文" + JsonHelper.SerializeObject(data));
string state = string.Empty; string state = string.Empty;
if (data.method == "start") if (data.method == "start")
{ {
state = "2";//任务开始启动 state = "2";//任务开始启动
} }
else if (data.method == "outbin") { else if (data.method == "outbin")
{
state = "3";//走出储位 state = "3";//走出储位
} }
else if (data.method == "end") else if (data.method == "end")
{ {
state = "4"; state = "4";
//更新任务已完成 //更新任务已完成
DataTable dt = inboundBLL.GetInOrderList(" and agvid ='" + data.taskCode + "'");
if (dt != null && dt.Rows.Count > 0)
{
wmsCallbackModel backModel = new wmsCallbackModel();
List<callbackHeader> list = new List<callbackHeader>();
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<RetMesModel>(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"; state = "88";
} }
else { } else { }
inboundBLL.UpInOrderListByAgvid(data.taskCode,state); inboundBLL.UpInOrderListByAgvid(data.taskCode, state);
//ResultMessageModel data = new ResultMessageModel();
//data.Parameter = model.reqCode; retModel.message = "成功!";
//data.Status = model.method; retModel.code = "0";
//data.Address = model.taskCode; retModel.reqCode = data.reqCode;
//JobCache.UpdateJobDownModelList(new List<ResultMessageModel>() { data }, EdownCommend.Create); }
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<agvexTaskList> taskList = new List<agvexTaskList>();
agvexTaskHeader agvexHeader = new agvexTaskHeader();
List<agvexTaskHeader> headerlist = new List<agvexTaskHeader>();
List<warnCallbackData> 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.message = "成功!";
retModel.code = "0"; retModel.code = "0";
retModel.reqCode = data.reqCode; retModel.reqCode = data.reqCode;
@ -60,7 +168,8 @@ namespace Epost.DPS.Controllers
retModel.code = "-1"; retModel.code = "-1";
retModel.reqCode = data.reqCode; 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; return retModel;
} }
} }

View File

@ -3,21 +3,27 @@ using Epost.Common;
using Epost.Model; using Epost.Model;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Configuration;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Web.Http; using System.Web.Http;
using static System.Net.WebRequestMethods;
namespace Epost.DPS.Controllers namespace Epost.DPS.Controllers
{ {
[RoutePrefix("api/TaskAPI")] [RoutePrefix("api/TaskAPI")]//WMS=>WCS
public class TaskAPIController : ApiController public class TaskAPIController : ApiController
{ {
InboundOrdersBLL inOrderBLL = new InboundOrdersBLL(); InboundOrdersBLL inOrderBLL = new InboundOrdersBLL();
PalletinfoBLL palletBLL = new PalletinfoBLL(); PalletinfoBLL palletBLL = new PalletinfoBLL();
Sys_operate_logBLL logBLL = new Sys_operate_logBLL(); 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] [HttpPost]
public RetMesModel agvPutTask([FromBody] TaskModel model) public RetMesModel agvPutTask([FromBody] TaskModel model)
{ {
@ -210,7 +216,7 @@ namespace Epost.DPS.Controllers
[Route("agvCancleTask")] [Route("agvCancleTask")]//WMS=>WCS取消任务
[HttpPost] [HttpPost]
public RetMesModel agvCancleTask([FromBody]AgvCancleModel model) public RetMesModel agvCancleTask([FromBody]AgvCancleModel model)
{ {
@ -237,10 +243,19 @@ namespace Epost.DPS.Controllers
if (orderdt != null && orderdt.Rows.Count > 0) 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 { else {
@ -268,13 +283,13 @@ namespace Epost.DPS.Controllers
response.returnnode = res; response.returnnode = res;
retMes.Response = response; retMes.Response = response;
string resinfo = JsonHelper.SerializeObject(retMes) ; 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; return retMes;
} }
[Route("agvBindPodAndBerth")] [Route("agvBindPodAndBerth")]//WMS=>WCS绑定解绑
[HttpPost] [HttpPost]
public RetMesModel agvBindPodAndBerth([FromBody] agvBindPodModel model) public RetMesModel agvBindPodAndBerth([FromBody] agvBindPodModel model)
{ {
@ -297,19 +312,44 @@ namespace Epost.DPS.Controllers
} }
else 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<bindCtnrAndBinResponse>(resultStr);
if (resModel.code == "0")
{
res.returnCode = "0000"; res.returnCode = "0000";
res.returnDesc = "成功!"; res.returnDesc = "绑定/解绑成功!";
res.returnFlag = "1"; res.returnFlag = "1";
}
else
{
res.returnCode = "0000";
res.returnDesc = "绑定/解绑失败!";
res.returnFlag = "1";
}
}
} }
} }
}
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -322,7 +362,7 @@ namespace Epost.DPS.Controllers
response.returnnode = res; response.returnnode = res;
retMes.Response = response; retMes.Response = response;
string resinfo = JsonHelper.SerializeObject(retMes); 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; return retMes;
} }
} }

View File

@ -11,7 +11,7 @@
<WebStackScaffolding_IsAsyncSelected>False</WebStackScaffolding_IsAsyncSelected> <WebStackScaffolding_IsAsyncSelected>False</WebStackScaffolding_IsAsyncSelected>
<WebStackScaffolding_ViewDialogWidth>600</WebStackScaffolding_ViewDialogWidth> <WebStackScaffolding_ViewDialogWidth>600</WebStackScaffolding_ViewDialogWidth>
<NameOfLastUsedPublishProfile>E:\WORK\代码管理\T系列\播种\Epost.TestToolsWeb\Properties\PublishProfiles\Toolsweb.pubxml</NameOfLastUsedPublishProfile> <NameOfLastUsedPublishProfile>E:\WORK\代码管理\T系列\播种\Epost.TestToolsWeb\Properties\PublishProfiles\Toolsweb.pubxml</NameOfLastUsedPublishProfile>
<LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig> <LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
<Use64BitIISExpress /> <Use64BitIISExpress />
<IISExpressSSLPort /> <IISExpressSSLPort />
<IISExpressAnonymousAuthentication /> <IISExpressAnonymousAuthentication />
@ -21,5 +21,29 @@
<Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID> <Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID>
<Controller_SelectedScaffolderCategoryPath>root/Common/Web API</Controller_SelectedScaffolderCategoryPath> <Controller_SelectedScaffolderCategoryPath>root/Common/Web API</Controller_SelectedScaffolderCategoryPath>
</PropertyGroup> </PropertyGroup>
<ProjectExtensions /> <ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<StartPageUrl>
</StartPageUrl>
<StartAction>CurrentPage</StartAction>
<AspNetDebugging>True</AspNetDebugging>
<SilverlightDebugging>False</SilverlightDebugging>
<NativeDebugging>False</NativeDebugging>
<SQLDebugging>False</SQLDebugging>
<ExternalProgram>
</ExternalProgram>
<StartExternalURL>
</StartExternalURL>
<StartCmdLineArguments>
</StartCmdLineArguments>
<StartWorkingDirectory>
</StartWorkingDirectory>
<EnableENC>True</EnableENC>
<AlwaysStartWebServerOnDebug>False</AlwaysStartWebServerOnDebug>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project> </Project>

View File

@ -21,8 +21,8 @@ namespace Epost.TestToolsWeb
{ {
public class MvcApplication : System.Web.HttpApplication public class MvcApplication : System.Web.HttpApplication
{ {
InboundOrdersBLL inboundBLL = new InboundOrdersBLL(); InboundOrdersBLL inboundBLL = new InboundOrdersBLL();
AgvHelper agv = new AgvHelper();
protected void Application_Start() protected void Application_Start()
{ {
AreaRegistration.RegisterAllAreas(); AreaRegistration.RegisterAllAreas();
@ -43,7 +43,7 @@ namespace Epost.TestToolsWeb
if (dt != null && dt.Rows.Count > 0) if (dt != null && dt.Rows.Count > 0)
{ {
foreach (DataRow row in dt.Rows) { foreach (DataRow row in dt.Rows) {
AgvHelper agv = new AgvHelper();
AgvSchedulingTaskModel reqmodel = new AgvSchedulingTaskModel(); AgvSchedulingTaskModel reqmodel = new AgvSchedulingTaskModel();
reqmodel.reqCode =DateTime.Now.Month+DateTime.Now.Day+ row["id"].ToString();; reqmodel.reqCode =DateTime.Now.Month+DateTime.Now.Day+ row["id"].ToString();;
List<Positioncodepath> positionList = new List<Positioncodepath>(); List<Positioncodepath> positionList = new List<Positioncodepath>();

View File

@ -33,8 +33,13 @@
<add key="CARID" value="HT01" /> <add key="CARID" value="HT01" />
<add key="ServerAPIURL" value="http://192.168.0.20:8045/api/WebAPI" /> <add key="ServerAPIURL" value="http://192.168.0.20:8045/api/WebAPI" />
<add key="SleepTime" value="1" /> <add key="SleepTime" value="1" />
<add key="agvUrl" value="http://192.168.0.20:8045/api/WebAPI/ProcessingResult"/>
<!--wcs->agv绑定解绑-->
<add key="bindCtnrAndBinUrl" value="http://172.18.26.26:8182/rcms/services/rest/hikRpcService/bindCtnrAndBin" />
<!--wcs->wms任务执行通知-->
<add key="agvCallbackUrl" value="http://172.18.26.30:18080/datahubjson/ZYZY_AGV/?method=agvCallback" />
<!--wcs->wms告警-->
<add key="agvexTaskUrl" value="http://172.18.26.30:18080/datahubjson/ZYZY_AGV/?method=agvexTask" />
</appSettings> </appSettings>
<!-- <!--
有关 web.config 更改的说明,请参见 http://go.microsoft.com/fwlink/?LinkId=235367。 有关 web.config 更改的说明,请参见 http://go.microsoft.com/fwlink/?LinkId=235367。