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 System.Collections.Generic;
using Model.ModelVm.PdaVm;
using WMS.IBLL.IPdaServer;
using Model.ModelVm;
using WMS.IBLL.IDataServer;
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 IPdaSoServer _pdaSoSvc;//空托出库Svc
private readonly IPdaAsnServer _paAsnSvc;//空托跺绑定
private readonly IStockServer _stockSvc;//AGV任务完成箅
private readonly IPdaCrServer _pdaCrServer; // PDA任务调度
private static readonly object OLock = new object();
public DownApiController(IOptions setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc, IPdaSoServer pdaSoSvc,IPdaAsnServer paAsnSvc,IStockServer stockSvc,IPdaCrServer pdaCrServer)
{
_config = setting.Value;
_exNoticeSvc = exNoticeSvc;
_asnPalletBindSvc = asnPalletBindSvc;
_crCheckSvc = crCheckSvc;
_taskSvc = taskSvc;
_pdaSoSvc = pdaSoSvc;
_paAsnSvc = paAsnSvc;
_stockSvc = stockSvc;
_pdaCrServer = pdaCrServer;
}
#region WMS接口 调用下游系统接口
///
/// 指令下发(出库)
///
/// 拆垛方式
/// 出库单号
/// 出库口
/// 装车口
///
[Authorize]
[HttpGet]
public IActionResult IssueOutHouse(string soNo, string unstackingMode, string outMode,string checkmode, 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, checkmode, 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,string Receiver)
{
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);
OutCommandDto list = new OutCommandDto();
if (Receiver == "WCS")
{
//需判断AGV或WCS的出库任务
//wcs
list = _exNoticeSvc.AgainSendSoTask(taskNo, Receiver, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl2);
}
else if(Receiver == "AGV")
{
//agv
list = _exNoticeSvc.AgainSendSoTask(taskNo, Receiver, int.Parse(userId), _config.WcsHost + _config.ContinueTask);
}
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 RequestRoadWay(RequestLocate model)
{
lock (OLock) {
var logStr = "";
logStr = $@".\log\WCS\WCS申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
try
{
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"WCS申请巷道:( {jsonData} ),", logStr);
if (model.TaskModel == "1")
{
var list = _asnPalletBindSvc.RequestRoadWayModel(model.PalletNo, model.HouseNo);
LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo,
"申请巷道", $"申请巷道托盘号:{model.PalletNo}的成功信息", 2);
return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list });
}
else
{
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,
"申请巷道", $"申请巷道托盘号:{model.PalletNo}的失败信息", 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;
lock (OLock)
{
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);
OutCommandDto list;
if (model.TaskModel == "1")
{
list = _asnPalletBindSvc.RequestLocationModel(pallet, model.HouseNo, model.RoadwayNo);
}
else
{
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);
}
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,model.TaskType);// 判断单据类型入出移
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, _config.AgvHost + _config.GenAgvSchedulingTask);
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,StatusCode = 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, StatusCode = 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);
}
}
///
/// 自动码垛绑定信息返回巷道口
///
/// 入库单信息
///
[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 });
}
}
///
/// WCS申请空托跺绑定
///
///
///
[AllowAnonymous]
[HttpPost]
public IActionResult BindPlnInHouseWcs(PalletsBind model)
{
var logStr = $@".\log\WCS\WCS又叠托机申请空托入库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
try
{
var strMsg = _paAsnSvc.BindNullPallets(model);
return Ok(new { Success = 0, Message = "空托跺绑定成功"});
}
catch (Exception e)
{
LogFile.SaveLogToFile($"WCS申请空托跺绑定异常返回:( {e.Message} ),", logStr);
return Ok(new ErpModel { Success = -1, Message = e.Message });
}
}
///
/// WCS申请空托出库
///
///
///
[AllowAnonymous]
[HttpPost]
public IActionResult IssuePlnOutHouseWcs(OutModePalletVm model)
{
var logStr = $@".\log\WCS\WCS申请空托出库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
try
{
List _list = _pdaSoSvc.IssuePlnOutHouseWcs(model,0);
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 });
}
}
///
/// WMS拣货申请空托出库
///
///
///
[AllowAnonymous]
[HttpPost]
public IActionResult IssuePlnCheckHouseWcs(CheckModePalletVm model)
{
var logStr = $@".\log\WCS\WMS拣货申请空托出库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
try
{
string list = _pdaSoSvc.IssuePlnCehckHouseWcs(model, 0,_config.AgvHost+_config.GenAgvSchedulingTask);
return Ok(new { Success = 0, Message = "拣货叫空托盘成功"});
}
catch (Exception e)
{
LogFile.SaveLogToFile($"WMS拣货申请空托出库异常返回:( {e.Message} ),", logStr);
return Ok(new ErpModel { Success = -1, Message = e.Message });
}
}
///
/// WCS申请是否缠膜
///
///
///
[AllowAnonymous]
[HttpPost]
public IActionResult RequestPackWcs(RequesIsBale model)
{
var logStr = $@".\log\WCS\WCS申请缠膜拆膜" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
try
{
int t = _asnPalletBindSvc.RequestPackWcs(model.PalletNo);
LogFile.SaveLogToFile($"WCS申请缠膜入库请求,请求托盘呈:( {model.PalletNo} ),", logStr);
return Ok(new { Success = t, Message = "缠膜指令发送成功" });
}
catch (Exception e)
{
LogFile.SaveLogToFile($"WCS申请缠膜入库异常返回:( {e.Message} ),", logStr);
return Ok(new ErpModel { Success = -1, Message = e.Message });
}
}
///
/// WCS申请是否拆膜
///
///
///
[AllowAnonymous]
[HttpPost]
public IActionResult RequestUnPackWcs(RequesIsBale model)
{
var logStr = $@".\log\WCS\WCS申请缠膜拆膜" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
try
{
int t = _asnPalletBindSvc.RequestUnPackWcs(model.PalletNo);
return Ok(new { Success = t, Message = "拆膜指令发送成功" });
}
catch (Exception e)
{
LogFile.SaveLogToFile($"WCS申请拆膜出库异常返回:( {e.Message} ),", logStr);
return Ok(new ErpModel { Success = -1, Message = e.Message });
}
}
///
/// WCS反馈缠膜完成
///
///
///
[AllowAnonymous]
[HttpPost]
public IActionResult RequestPackedWcs(RequesIsBale model)
{
var logStr = $@".\log\WCS\WCS申请缠膜拆膜" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
try
{
int t = _asnPalletBindSvc.RequestPackedWcs(model.PalletNo);
return Ok(new { Success = t, Message = "缠膜完成指令发送成功" });
}
catch (Exception e)
{
LogFile.SaveLogToFile($"WCS申请缠膜完成异常返回:( {e.Message} ),", logStr);
return Ok(new ErpModel { Success = -1, Message = e.Message });
}
}
/////
///// 成品箱码拆垛拣货
/////
///// 入库单信息
/////
//[AllowAnonymous]
//[HttpPost]
//public IActionResult BoxUnstackd(BoxPickList model)
//{
// var logStr = $@".\log\WCS\WCS成品箱码拆垛" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
// try
// {
// var jsonData = JsonConvert.SerializeObject(model);
// LogFile.SaveLogToFile($"WCS成品箱码拆垛:( {jsonData} ),", logStr);
// _comeSvc.BoxUnstackd(model.PalletNo, model.BoxList);
// var list = new { Success = 0, Message = "成品箱码拆垛" };
// LogFile.SaveLogToFile($"WCS成品箱码拆垛返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
// return Ok(list);
// }
// catch (Exception e)
// {
// LogFile.SaveLogToFile($"WCS成品箱码拆垛:( {e.Message} ),", logStr);
// return Ok(new ErpModel { Success = -1, Message = e.Message });
// }
//}
//申请空托(自动码空托时用)
//车间叫料
//WCS申请拆垛信息
///
/// 成品箱码拆垛拣货
///
/// 入库单信息
///
[AllowAnonymous]
[HttpPost]
public IActionResult ResultBoxInfoCheckWcs(BoxInfoCheck model)
{
var logStr = $@".\log\WCS\WCS申请拆垛托盘信息" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
try
{
RequestBoxInfoCheck list = _exNoticeSvc.BoxInfoCheckWcs(model);
return Ok(new { Success = 1,Message = "拆垛信息获取成功",data = list});
}
catch (Exception e)
{
LogFile.SaveLogToFile($"WCS申请托盘拆垛异常返回:( {e.Message} ),", logStr);
return Ok(new ErpModel { Success = -1, Message = e.Message});
}
}
///
/// 成品箱码拆垛拣货
///
/// 入库单信息
///
[AllowAnonymous]
[HttpPost]
public IActionResult ResultBoxInfoExportWcs(BoxInfoCheck model)
{
var logStr = $@".\log\WCS\WCS申请成品箱码拆垛拣货信息" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"任务反馈:( {jsonData} ),", logStr);
try
{
//返回出库分拣装车口
var list = _exNoticeSvc.BoxInfoExportWcs(model.BoxNo);
return Ok(new { Success = "1", Message = "成品箱码拆垛拣货成功", loadingAddre = list });
}
catch (Exception e)
{
LogFile.SaveLogToFile($"WCS申请成品箱码拆垛拣货异常返回:( {e.Message} ),", logStr);
return Ok(new { Success = "-1", Message = e.Message, loadingAddre = "" });
}
}
#endregion
#region AGV
///
/// 任务执行通知接口
/// AGV 执行回调的方法,包含任务开始,走出储位,任务完成及任务取消。
/// 取消通知为任务单,其他通知为单个任务组或子任务。注意:是否通知需要在任务模板配置
///
/// 入库单信息
///
[HttpPost]
public IActionResult AgvCallback(AgvTaskDto model)
{
try
{
//记录log
var logStr = $@".\log\AGV\任务反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"AGV任务反馈执行通知:( {jsonData} ),", logStr);
//接收时间
var time1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//测试接口用
var orderType = _taskSvc.GetTaskOrderType(model.TaskCode, "0");// 判断单据类型入出移
var taskType = _taskSvc.GetTaskType(model.TaskCode);//根据任务号获取任务类型
switch (orderType)
{
case "0"://入库任务执行
if (model.Method == "mid") //AGV到达入库口,请求放货
{
//下发WCS放货请求
var ret = _taskSvc.GetWcsPuttype(model.TaskCode,_config.WcsHost + _config.HttpInRequest);
if (ret.Contains("-1"))
{
logStr = $@".\log\WCS\任务反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
LogFile.SaveLogToFile($"放货请求WCS失败,反馈执行通知:( {model.CurrentCallCode} ),", logStr);
return Ok(new OutCommanAgvDto { Code = "1", Message = "失败", ReqCode = model.ReqCode });
}
}
else if (model.Method == "end")//AGV放货到入库口完成
{
_stockSvc.ArriveFinish(model.TaskCode,_config.WcsHost + _config.HttpInFinish);
}
break;
case "1"://出库任务执行
_stockSvc.SoFinish(model.TaskCode,_config.MesHost + _config.MesBeiLiaoUrl);
break;
case "2"://盘库任务执行
case "3"://移库任务执行
_stockSvc.MoveFinish(model.TaskCode, _config.MesHost + _config.MesBeiLiaoUrl);
break;
// return Ok(new OutCommanAgvDto { Code = "0", Message = "成功", ReqCode = model.ReqCode });
default:
return Ok(new OutCommanAgvDto { Code = "1", Message = "失败", ReqCode = model.ReqCode });
}
return Ok(new OutCommanAgvDto { Code = "0", Message = "成功", ReqCode = model.ReqCode });
}
catch (Exception ex)
{
return Ok(new OutCommanAgvDto
{
Code = "1",
Message = ex.Message
});
}
}
///
/// 任务继续执行接口
/// 调用AGV任务模板continueTask,WCS调用接口返回该工位可放信号
///
/// 入库口信息
///
[HttpPost]
public IActionResult AgcontinueTask(PutModel model)
{
try
{
//记录log
var logStr = $@".\log\WCS\任务反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
var jsonData = JsonConvert.SerializeObject(model);
LogFile.SaveLogToFile($"WCS任务反馈执行通知:( {jsonData} ),", logStr);
//下发AGV继续执行
_pdaCrServer.AgvContinue(model.TaskNo,_config.AgvHost+_config.ContinueTask);
return Ok(new HttpReturnModel { Success = "0", Message = "成功"});
}
catch (Exception ex)
{
return Ok(new HttpReturnModel { Success = "1", Message = ex.ToString() });
throw ex;
}
}
#endregion
#region PDA
//空托指令下发(出库)
#endregion
}
}