using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Model.InterFaceModel; using Newtonsoft.Json; using System; using System.IO; using System.Security.Claims; using Utility.Tools; using WMS.BLL.LogServer; using WMS.IBLL.IBllAsnServer; using WMS.IBLL.IBllCheckServer; using WMS.IBLL.IBllSoServer; using WMS.IBLL.ILogServer; using Wms.Tools; using WMS.Entity.BllTaskEntity; using WMS.IBLL.IBllTaskServer; using Model.ModelVm.BllTaskVm; using static Model.InterFaceModel.RCSModel; using WMS.IBLL.IBllTransServer; using Microsoft.Extensions.Logging; using ZXing.QrCode.Internal; using Model.ModelVm.BllCheckVm; namespace Wms.Controllers { /// /// 下游系统交互 /// [Route("api/[controller]/[action]")] [ApiController] public class DownApiController : ControllerBase { private readonly ApiUrlConfig _config; //接口交互路径 private readonly IExportNoticeServer _exNoticeSvc;//出库单Svc private readonly IPalletBindServer _asnPalletBindSvc;//托盘绑定Svc private readonly IStockCheckServer _crCheckSvc;//托盘绑定Svc private readonly ITaskServer _taskSvc;//任务Svc private readonly IBllTaskSyncServer _taskSyncSvc;//任务同步Svc private readonly IWaveMageServer _waveSvc;//任务同步Svc private readonly IRcsServer _rcsserver;//RCS相关任务 private readonly INoticeServer _noticeSvc;//二楼单据相关 public DownApiController(IOptions setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc, IBllTaskSyncServer taskSyncSvc, IWaveMageServer waveSvc, IRcsServer rcsserver, INoticeServer noticeSvc) { _config = setting.Value; _exNoticeSvc = exNoticeSvc; _asnPalletBindSvc = asnPalletBindSvc; _crCheckSvc = crCheckSvc; _taskSvc = taskSvc; _taskSyncSvc = taskSyncSvc; _waveSvc = waveSvc; _rcsserver = rcsserver; _noticeSvc = noticeSvc; } #region WMS接口 调用下游系统接口 /// /// 指令下发(波次出库) /// /// 拆垛方式 /// 出库单号 /// 出库口 /// 装车口 /// [Authorize] [HttpGet] public IActionResult WaveIssueOutHouse(string waveNo, string unstackingMode, string outMode, string loadingAddre) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } //验证出库口 //if (string.IsNullOrWhiteSpace(outMode)) //{ // return Ok(new { code = 1, msg = "请选择出库口" }); //} var list = _waveSvc.WaveIssueOutHouse(waveNo, unstackingMode, outMode, loadingAddre, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str); return Ok(new { code = 0, msg = str, data = list }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 指令下发(出库) /// /// 拆垛方式 /// 出库单号 /// 出库口 /// 装车口 /// [Authorize] [HttpGet] public IActionResult IssueOutHouse(string soNo,string unstackingMode, string outMode,string loadingAddre) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } //验证出库口 //if (string.IsNullOrWhiteSpace(outMode)) //{ // return Ok(new { code = 1, msg = "请选择出库口" }); //} var list = _exNoticeSvc.IssueOutHouse(soNo,unstackingMode, outMode,loadingAddre, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl,out string str); return Ok(new { code = 0, msg = str , data = list }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 重新下发出库任务 /// /// /// [HttpGet] public IActionResult AgainSendSoTask(string taskNo) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var list = _exNoticeSvc.AgainSendSoTask(taskNo, int.Parse(userId),_config.WcsHost + _config.IssueComApiUrl2); return Ok(new { code = 0, msg = "重新下发已完成", data = list }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 指令下发(盘点出库) /// /// /// /// [Authorize] [HttpGet] public IActionResult CheckOutHouse(string crNo,string outMode) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var list = _crCheckSvc.CheckOutHouse(crNo, outMode,int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str); return Ok(new { code = 0, msg = str, data = list }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 重新下发盘点任务 /// /// /// [HttpGet] public IActionResult AgainSendCheckTask(string taskNo) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _crCheckSvc.AgainSendCheckTask(taskNo, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl2); return Ok(new { code = 0, msg = "重新下发已完成", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion #region WMS接口 被下游系统接口调用 /// /// 绑定信息返回巷道口 /// /// 入库单信息 /// [AllowAnonymous] [HttpPost] public IActionResult BindRequestRoadWay(BoxPalletBindVm model) { var logStr = $@".\log\WCS\WCS托盘绑定-申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; try { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道:( {jsonData} ),", logStr); _asnPalletBindSvc.BindPalletStock(model, 0); //申请巷道 var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, "W01"); LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr); return Ok(new { Success = 0, Message = "托盘绑定-申请巷道成功", TaskList = list }); } catch (Exception e) { LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道返回:( {e.Message} ),", logStr); return Ok(new ErpModel { Success = -1, Message = e.Message }); } } /// /// 申请巷道 /// /// 入库单信息 /// [AllowAnonymous] [HttpPost] public IActionResult RequestRoadWay(RequestLocate model) { var logStr = ""; logStr = $@".\log\WCS\WCS申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; try { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"WCS申请巷道:( {jsonData} ),", logStr); var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo ); LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr); //new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), // "申请巷道", $"申请巷道托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2); return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list }); } catch (Exception e) { LogFile.SaveLogToFile($"WCS申请巷道返回:( {e.Message} ),", logStr); //new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), //"申请巷道", $"申请巷道托盘号:{model.PalletNo.Substring(0, 8)}的失败信息", 2); return Ok(new ErpModel { Success = -1, Message = e.Message }); } } /// /// 申请储位 /// /// 入库单信息 /// [AllowAnonymous] [HttpPost] public IActionResult RequestLocation(RequestLocate model) { //获取当前登录的用户ID //var claimsIdentity = this.User.Identity as ClaimsIdentity; //if (claimsIdentity == null) //{ // return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); //} //var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; //if (string.IsNullOrWhiteSpace(userId)) //{ // return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); //} //string palletno = model.PalletNo; var logStr = ""; if (model.PalletNo.Length == 9) { logStr = $@".\log\WCS\WMS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; } else if (model.PalletNo.Length == 8) { logStr = $@".\log\WCS\WCS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; } try { if (model.PalletNo.Length == 9) { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"WMS申请储位:( {jsonData} ),", logStr); } else if (model.PalletNo.Length == 8) { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"WCS申请储位:( {jsonData} ),", logStr); } string pallet = model.PalletNo.Substring(0, 8); var list = _asnPalletBindSvc.RequestLocation(pallet, model.HouseNo,model.RoadwayNo); if (model.PalletNo.Length == 9) { new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的成功信息",2);// int.Parse(userId) LogFile.SaveLogToFile($"WMS申请储位成功:( {JsonConvert.SerializeObject(list)} ),", logStr); } else if (model.PalletNo.Length == 8) { LogFile.SaveLogToFile($"WCS申请储位返回:( {JsonConvert.SerializeObject(list)} ),", logStr); } if (model.PalletNo.Length == 9) { } return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list }); } catch (Exception e) { if (model.PalletNo.Length == 9) { new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0,8)}的失败信息", 2);//int.Parse(userId) LogFile.SaveLogToFile($"WMS申请储位失败返回:( {e.Message} ),", logStr); } else if(model.PalletNo.Length == 8) { LogFile.SaveLogToFile($"WCS申请储位返回:( {e.Message} ),", logStr); } return Ok(new ErpModel { Success = -1, Message = e.Message }); } } /// /// 接受wcs返回的信号 //指令反馈(是否完成) /// /// [HttpPost] public IActionResult ReceiveWcsSignal(ReceiveWcsSignal model) { try { //记录log var logStr = $@".\log\WCS\任务反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr); if (string.IsNullOrEmpty(model.TaskNo) || string.IsNullOrEmpty(model.TaskStatus) || string.IsNullOrEmpty(model.TaskType)) { return Ok(new WcsModel { StatusCode = -1, Msg = "接口数据不正确" }); } //接收时间 var time1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var orderType = _taskSvc.GetTaskOrderType(model.TaskNo);// 判断单据类型入出移 switch (orderType) { case "0"://入库完成任务 if (model.TaskType == "0")//0:入库 1:出库 2:移库 { _asnPalletBindSvc.ArrivalSuccess(model.TaskNo,0); return Ok(new WcsModel { StatusCode = 0, Msg = "入库完成" }); } break; case "1"://出库完成任务 if (model.TaskType == "1")//0:入库 1:出库 2:移库 { _exNoticeSvc.ExportSuccess(model.TaskNo,0); return Ok(new WcsModel { StatusCode = 0, Msg = "出库完成" }); } else if (model.TaskType == "2") { _exNoticeSvc.RelocationSuccess(model.TaskNo, 0); return Ok(new WcsModel { StatusCode = 0, Msg = "移库完成" }); } break; case "2"://盘库完成任务 if (model.TaskType == "1")//0:入库 1:出库 3:移库 { _crCheckSvc.CheckSuccess(model.TaskNo, 0); return Ok(new WcsModel { StatusCode = 0, Msg = "盘点出库完成" }); } else if (model.TaskType == "0")// 盘点出库托盘回库完成 { _asnPalletBindSvc.ArrivalSuccess(model.TaskNo, 0); return Ok(new WcsModel { StatusCode = 0, Msg = "入库完成" }); } break; case "3"://移库完成任务、优化储位 if (model.TaskType == "3") //0:入库 1:出库 3:移库 { //填写移库完成代码 } break; default : return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" }); } return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" }); } catch (Exception ex) { return Ok(new WcsModel { StatusCode = -1, Msg = ex.Message }); } } /// /// 空取异常 /// /// [HttpPost] public IActionResult EmptyException(ReceiveWcsSignal model) { var logStr = $@".\log\WCS\异常反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; try { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"空取异常:( {jsonData} ),", logStr); var bl = _exNoticeSvc.EmptyException(model); LogFile.SaveLogToFile($"空取异常:(执行结果成功),", logStr); return Ok(new { Success = 0, Message = ""}); } catch (Exception e) { LogFile.SaveLogToFile($"空取异常:( {e.Message} ),", logStr); return Ok(new ErpModel { Success = -1, Message = e.Message }); } } /// /// 满入异常 /// /// [HttpPost] public IActionResult FullException(ReceiveWcsSignal model) { var logStr = $@".\log\WCS\异常反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; try { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"满入异常:( {jsonData} ),", logStr); var list = _asnPalletBindSvc.FullException(model); LogFile.SaveLogToFile($"满入异常:( {JsonConvert.SerializeObject(list)} ),", logStr); return Ok(new { Success = 0, Message = "", TaskList = list }); } catch (Exception e) { LogFile.SaveLogToFile($"满入异常:( {e.Message} ),", logStr); return Ok(new ErpModel { Success = -1, Message = e.Message }); } } //每日清空日志 [HttpPost] public IActionResult DeleteNlogFile() { try { string[] files = null; try { files = Directory.GetFiles(_config.GetLog1); } catch { try { files = Directory.GetFiles(_config.GetLog2); } catch (Exception ex) { throw new Exception(ex.Message); } } finally { foreach (string file in files) { FileInfo fi = new FileInfo(file); if (fi.LastWriteTime < DateTime.Now.AddMonths(-1)) { fi.Delete(); } } } return Ok(new { msg = "成功清除" }); } catch (Exception ex) { throw new Exception(ex.Message); } } //托盘箱码信息 自动码垛 (wcs提供) //申请空托(自动码空托时用) //agv返回信息(任务是否完成) /// /// 接受agv返回的信号 //指令反馈(是否完成) /// /// [HttpPost] public IActionResult ReceiveAgvSignal(ReceiveWcsSignal model) { try { //记录log var logStr = $@".\log\AGV\任务反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr); if (string.IsNullOrEmpty(model.TaskNo) || string.IsNullOrEmpty(model.TaskStatus) || string.IsNullOrEmpty(model.TaskType)) { return Ok(new WcsModel { StatusCode = -1, Msg = "接口数据不正确" }); } //接收时间 var time1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var orderType = _taskSvc.GetTaskOrderType(model.TaskNo);// 判断单据类型入出移 switch (orderType) { case "1"://出库完成任务 if (model.TaskType == "1")//0:入库 1:出库 2:移库 { _exNoticeSvc.ExportSuccessAGV(model.TaskNo, 0); return Ok(new WcsModel { StatusCode = 0, Msg = "出库完成" }); } else { return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务类型不是出库类型" }); } default: return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" }); } } catch (Exception ex) { return Ok(new WcsModel { StatusCode = -1, Msg = ex.Message }); } } /// /// 接收同步任务信息 /// /// /// [HttpPost] public IActionResult ReceiveWCSTaskSync(TaskSyncInfoVm model) { try { //记录log var logStr = $@".\log\WCS\任务同步" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"任务同步:( {jsonData} ),", logStr); if (string.IsNullOrEmpty(model.TaskNo) || string.IsNullOrEmpty(model.StartLocat) || string.IsNullOrEmpty(model.EndLocat) || string.IsNullOrEmpty(model.PalletNo)) { return Ok(new WcsModel { StatusCode = -1, Msg = "接口数据不正确" }); } _taskSyncSvc.ReceiveWCSTaskSync(model); return Ok(new WcsModel { StatusCode = 0, Msg = "同步完成" }); } catch (Exception ex) { return Ok(new WcsModel { StatusCode = -1, Msg = ex.Message }); } } #endregion #region PDA //空托指令下发(出库) #endregion #region 二楼业务 /// /// RCS叫桶 /// /// /// [HttpPost] public IActionResult GetPalletNo(Pallnetmsg pallmsg) { var logStr = $@".\log\AGV\AGV申请叫桶" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; AgvResultModel resultModel = null;//返回信息 try { var jsonData = JsonConvert.SerializeObject(pallmsg); LogFile.SaveLogToFile($"AGV申请叫桶-请求报文:( {jsonData} ),", logStr); if (string.IsNullOrWhiteSpace(pallmsg.Location)) { resultModel = new AgvResultModel { code = "1", message = "叫料位置为空!", data = "", reqCode = "" }; var jsonData3 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV申请叫桶-返回报文:( {jsonData3} ),", logStr); return Ok(resultModel); } if (string.IsNullOrWhiteSpace(pallmsg.Type)) { resultModel = new AgvResultModel { code = "1", message = "任务类型为空!", data = "", reqCode = "" }; var jsonData4 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV申请叫桶-返回报文:( {jsonData4} ),", logStr); return Ok(resultModel); } string taskNo = ""; //具体处理方法 _rcsserver.GetPalletNo(pallmsg, _config.AgvHost + _config.GenAgvSchedulingTask, out taskNo); resultModel = new AgvResultModel { code = "0", message = "叫桶成功!", data = taskNo, reqCode = "" }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV申请叫桶-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } catch (Exception e) { LogFile.SaveLogToFile($"AGV申请叫桶异常:( {e.Message} ),", logStr); resultModel = new AgvResultModel { code = "1", message = e.Message, data = "", reqCode = "" }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV申请叫桶-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } } /// /// RCS申请储位 /// /// /// [HttpPost] public IActionResult ApplyLocatNo(Pallnetmsg pallmsg) { var logStr = $@".\log\AGV\AGV申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; AgvResultModel resultModel = null;//返回信息 try { var jsonData = JsonConvert.SerializeObject(pallmsg); LogFile.SaveLogToFile($"AGV申请储位-请求报文:( {jsonData} ),", logStr); if (string.IsNullOrWhiteSpace(pallmsg.Location)) { resultModel = new AgvResultModel { code = "1", message = "申请位置为空!", data = "", reqCode = "" }; var jsonData3 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData3} ),", logStr); return Ok(resultModel); } if (string.IsNullOrWhiteSpace(pallmsg.Type)) { resultModel = new AgvResultModel { code = "1", message = "任务类型为空!", data = "", reqCode = "" }; var jsonData3 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData3} ),", logStr); return Ok(resultModel); } //if (string.IsNullOrWhiteSpace(pallmsg.PalletNo)) //{ // resultModel = new AgvResultModel { code = "1", message = "申请桶号为空!", data = "", reqCode = "" }; // var jsonData3 = JsonConvert.SerializeObject(resultModel); // LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData3} ),", logStr); // return Ok(resultModel); //} string taskNo = ""; //具体处理方法 _rcsserver.ApplyLocatNo(pallmsg, _config.AgvHost + _config.GenAgvSchedulingTask, out taskNo); resultModel = new AgvResultModel { code = "0", message = "申请储位成功!", data = taskNo, reqCode = "" }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } catch (Exception e) { LogFile.SaveLogToFile($"AGV申请储位异常:( {e.Message} ),", logStr); resultModel = new AgvResultModel { code = "1", message = e.Message, data = "", reqCode = "" }; var jsonData3 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData3} ),", logStr); return Ok(resultModel); } } /// /// 将净桶改为脏桶并拉到脏桶区 /// /// /// [HttpPost] public IActionResult ChangePalletStatus(Pallnetmsg pallmsg) { var result = new ErpModel { Success = -1, Message = "", }; try { if (string.IsNullOrWhiteSpace(pallmsg.PalletNo)) { result.Message = "桶编号不能为空!"; return Ok(result); } _rcsserver.ChangePalletStatus(pallmsg.PalletNo, _config.AgvHost + _config.GenAgvSchedulingTask); result.Success = 0; result.Message = "操作成功!"; return Ok(result); } catch (Exception e) { result.Message = e.Message; return Ok(result); } } /// /// MES下发清洗锁定脏桶 /// /// /// [HttpPost] public IActionResult CleanPallet(Pallnetmsg pallmsg) { var result = new ErpModel { Success = -1, Message = "", }; try { if (string.IsNullOrWhiteSpace(pallmsg.Location)) { result.Message = "叫料位置为空!"; return Ok(result); } if (string.IsNullOrWhiteSpace(pallmsg.PalletNo)) { result.Message = "桶号为空!"; return Ok(result); } _rcsserver.CleanPallet(pallmsg, _config.AgvHost + _config.GenAgvSchedulingTask); result.Success = 0; result.Message = "叫桶成功!"; return Ok(result); } catch (Exception e) { result.Message = e.Message; return Ok(result); } } /// /// 入库单据下发 /// /// 入库单信息 /// //[Authorize] [HttpPost] public IActionResult CreateAsnWork(AsnInfo model) { var result = new ErpModel { Success = -1, Message = "" }; try { /*var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { throw new Exception("未获取到用户信息"); } string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(UserId)) { throw new Exception("未获取到用户信息"); }*/ result = _noticeSvc.CreateAsnWork(model); return Ok(result); } catch (Exception e) { result.Message = e.Message; return Ok(result); } } #region Agv任务完成反馈 /// /// 任务开始 /// /// /// [HttpPost] public IActionResult start(AgvTaskDto model) { //记录log var logStr = $@".\log\AGV\任务执行通知" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; AgvResultModel resultModel = null;//返回信息 try { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"AGV任务执行通知-任务开始-请求报文:( {jsonData} ),", logStr); //具体处理方法 resultModel = new AgvResultModel { code = "0", message = "成功", reqCode = model.reqCode }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV任务执行通知-任务开始-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } catch (Exception ex) { LogFile.SaveLogToFile($"AGV任务执行通知-任务开始-异常:( {ex.Message} ),", logStr); resultModel = new AgvResultModel { code = "1", message = ex.Message, reqCode = model.reqCode }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV任务执行通知-任务开始-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } } /// /// 走出储位 /// /// /// [HttpPost] public IActionResult outbin(AgvTaskDto model) { //记录log var logStr = $@".\log\AGV\任务执行通知" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; AgvResultModel resultModel = null;//返回信息 try { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"AGV任务执行通知-走出储位-请求报文:( {jsonData} ),", logStr); //具体处理方法 resultModel = new AgvResultModel { code = "0", message = "成功", reqCode = model.reqCode }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV任务执行通知-走出储位-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } catch (Exception ex) { LogFile.SaveLogToFile($"AGV任务执行通知-走出储位-异常:( {ex.Message} ),", logStr); resultModel = new AgvResultModel { code = "1", message = ex.Message, reqCode = model.reqCode }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV任务执行通知-走出储位-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } } /// /// 任务结束 /// /// /// [HttpPost] public IActionResult end(AgvTaskDto model) { //记录log var logStr = $@".\log\AGV\任务执行通知" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; AgvResultModel resultModel = null;//返回信息 try { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-请求报文:( {jsonData} ),", logStr); //具体处理方法 _rcsserver.RCSFinishTask(model.taskCode, "1", "AGV"); resultModel = new AgvResultModel { code = "0", message = "成功", reqCode = model.reqCode }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } catch (Exception ex) { LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-异常:( {ex.Message} ),", logStr); resultModel = new AgvResultModel { code = "1", message = ex.Message, reqCode = model.reqCode }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } } /// /// 任务单取消 /// /// /// [HttpPost] public IActionResult cancel(AgvTaskDto model) { //记录log var logStr = $@".\log\AGV\任务执行通知" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; AgvResultModel resultModel = null;//返回信息 try { var jsonData = JsonConvert.SerializeObject(model); LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-请求报文:( {jsonData} ),", logStr); //具体处理方法 resultModel = new AgvResultModel { code = "0", message = "成功", reqCode = model.reqCode }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } catch (Exception ex) { LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-异常:( {ex.Message} ),", logStr); resultModel = new AgvResultModel { code = "1", message = ex.Message, reqCode = model.reqCode }; var jsonData2 = JsonConvert.SerializeObject(resultModel); LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-返回报文:( {jsonData2} ),", logStr); return Ok(resultModel); } } #endregion /// /// 出库单据下发 /// /// 出库单信息 /// //[Authorize] [HttpPost] public IActionResult CreateSoWork(SoInfo model) { try { /*var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { throw new Exception("未获取到用户信息"); } string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(UserId)) { throw new Exception("未获取到用户信息"); }*/ SoResInfo result = _noticeSvc.CreateSoWork(model); return Ok(result); } catch (Exception e) { return Ok(new ErpModel { Success = -1, Message = e.Message }); } } /// /// 手动下发小车任务 /// /// /// [HttpPost] public IActionResult SendAgvTaskWms(CheckTaskVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _rcsserver.DownTask(model.taskNo, int.Parse(userId), _config.AgvHost + _config.GenAgvSchedulingTask); return Ok(new { code = 0, msg = "重新下发已完成", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 手动完成小车任务 /// /// /// [HttpPost] public IActionResult FinshAgvTaskWms(CheckTaskVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } //具体处理方法 _rcsserver.RCSFinishTask(model.taskNo, "1", "WMS"); return Ok(new { code = 0, msg = "重新下发已完成", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 手动取消AGV移库任务 /// /// /// [HttpPost] public IActionResult CancelAgvTaskWms(CheckTaskVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _rcsserver.CancelTask(model.taskNo, int.Parse(userId)); return Ok(new { code = 0, msg = "成功取消任务", data = "" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } #endregion } }