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
|
{
|
/// <summary>
|
/// 下游系统交互
|
/// </summary>
|
[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<ApiUrlConfig> 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接口 调用下游系统接口
|
|
/// <summary>
|
/// 指令下发(出库)
|
/// </summary>
|
/// <param name="unstackingMode">拆垛方式</param>
|
/// <param name="soNo">出库单号</param>
|
/// <param name="outMode">出库口</param>
|
/// <param name="loadingAddre">装车口</param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// 重新下发出库任务
|
/// </summary>
|
/// <param name="taskNo"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// 指令下发(盘点出库)
|
/// </summary>
|
/// <param name="crNo"></param>
|
/// <param name="outMode"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// 重新下发盘点任务
|
/// </summary>
|
/// <param name="taskNo"></param>
|
/// <returns></returns>
|
[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接口 被下游系统接口调用
|
|
/// <summary>
|
/// 申请巷道
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
}
|
|
/// <summary>
|
/// 申请储位
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
}
|
|
/// <summary>
|
/// 接受wcs返回的信号 //指令反馈(是否完成)
|
/// </summary>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
|
/// <summary>
|
/// 空取异常
|
/// </summary>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// 满入异常
|
/// </summary>
|
/// <returns></returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 自动码垛绑定信息返回巷道口
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// WCS申请空托跺绑定
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// WCS申请空托出库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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<OutCommandDto> _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 });
|
}
|
}
|
|
/// <summary>
|
/// WMS拣货申请空托出库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// WCS申请是否缠膜
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// WCS申请是否拆膜
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// WCS反馈缠膜完成
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
///// <summary>
|
///// 成品箱码拆垛拣货
|
///// </summary>
|
///// <param name="model">入库单信息</param>
|
///// <returns></returns>
|
//[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申请拆垛信息
|
/// <summary>
|
/// 成品箱码拆垛拣货
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[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});
|
}
|
|
}
|
|
|
/// <summary>
|
/// 成品箱码拆垛拣货
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[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
|
|
/// <summary>
|
/// 任务执行通知接口
|
/// AGV 执行回调的方法,包含任务开始,走出储位,任务完成及任务取消。
|
/// 取消通知为任务单,其他通知为单个任务组或子任务。注意:是否通知需要在任务模板配置
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[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
|
});
|
}
|
|
}
|
|
/// <summary>
|
/// 任务继续执行接口
|
/// 调用AGV任务模板continueTask,WCS调用接口返回该工位可放信号
|
/// </summary>
|
/// <param name="model">入库口信息</param>
|
/// <returns></returns>
|
[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
|
|
}
|
}
|