using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Security.Claims;
|
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.Extensions.Options;
|
using Model.InterFaceModel;
|
using Newtonsoft.Json;
|
using SqlSugar.Extensions;
|
using Utility.Tools;
|
using WMS.Entity.LogEntity;
|
using WMS.IBLL.IBllAsnServer;
|
using WMS.IBLL.IBllCheckServer;
|
using WMS.IBLL.IBllSoServer;
|
using WMS.IBLL.ILogServer;
|
using WMS.IBLL.ISysServer;
|
using WmsApi.Tools;
|
|
namespace WmsApi.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 IFunSettingServer _funSvc;//任务Svc
|
|
public DownApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc, IFunSettingServer funSvc)
|
{
|
_config = setting.Value;
|
_exNoticeSvc = exNoticeSvc;
|
_asnPalletBindSvc = asnPalletBindSvc;
|
_crCheckSvc = crCheckSvc;
|
_taskSvc = taskSvc;
|
_funSvc = funSvc;
|
}
|
|
#region WMS接口 调用下游系统接口
|
|
/// <summary>
|
/// 指令下发(出库)
|
/// </summary>
|
/// <param name="soNo"></param>
|
/// <returns></returns>
|
[Authorize]
|
[HttpGet]
|
public IActionResult IssueOutHouse(string soNo)
|
{
|
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.IssueTwoOutHouse(soNo, 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>
|
[HttpPost]
|
public IActionResult AgainSendSoTask(LogTask task)
|
{
|
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(task.TaskNo, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl);
|
|
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>
|
/// <returns></returns>
|
[Authorize]
|
[HttpGet]
|
public IActionResult CheckOutHouse(string crNo)
|
{
|
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, 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 });
|
}
|
}
|
|
|
#endregion
|
|
#region WMS接口 被下游系统接口调用
|
|
/// <summary>
|
/// 申请储位
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult RequestLocation(RequestLocate model)
|
{
|
try
|
{
|
var logStr = $@".\log\WCS\WCS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
//model.ManuFactureDate = DateTime.Now;
|
var jsonData = JsonConvert.SerializeObject(model);
|
LogFile.SaveLogToFile($"WCS申请储位:( {jsonData} ),", logStr);
|
var list = _asnPalletBindSvc.RequestLocation(model);
|
return Ok(new { Success = 0, Message = "", TaskList = list });
|
}
|
catch (Exception e)
|
{
|
var logStr = $@".\log\WCS\WCS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
LogFile.SaveLogToFile($"WCS申请储位失败:( {e.Message} ),", logStr);
|
return Ok(new { Success = -1, Message = e.Message });
|
}
|
}
|
|
/// <summary>
|
/// 接受wcs返回的信号 //指令反馈(是否完成)
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult ReceiveWcsSignal(ReceiveWcsSignal model)
|
{
|
try
|
{
|
//记录log
|
var logStr = $@".\log\WCS\接收WCS返回信号" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
var jsonData = JsonConvert.SerializeObject(model);
|
LogFile.SaveLogToFile($"接收WCS返回信号:( {jsonData} ),", logStr);
|
|
if (string.IsNullOrEmpty(model.TaskNo) || string.IsNullOrEmpty(model.TaskStatus) || string.IsNullOrEmpty(model.TaskType))
|
{
|
return Ok(new WcsReturnModel { 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 WcsReturnModel { StatusCode = 0, Msg = "入库完成" });
|
}
|
break;
|
case "1"://出库完成任务
|
if (model.TaskType == "1")//0:入库 1:出库 2:移库
|
{
|
_exNoticeSvc.ExportSuccess(model.TaskNo, 0, "");
|
return Ok(new WcsReturnModel { StatusCode = 0, Msg = "出库完成" });
|
}
|
else if (model.TaskType == "2")
|
{
|
//改原、目标储位状态,库存明细表位置信息,任务改为已完成
|
_exNoticeSvc.RelocationSuccess(model.TaskNo, 0, "");
|
return Ok(new WcsReturnModel { StatusCode = 0, Msg = "移库完成" });
|
}
|
break;
|
case "2"://盘库完成任务
|
if (model.TaskType == "1")//0:入库 1:出库 2:移库
|
{
|
_crCheckSvc.CheckSuccess(model.TaskNo, 0, "");
|
return Ok(new WcsReturnModel { StatusCode = 0, Msg = "盘点出库完成" });
|
}
|
else if (model.TaskType == "0")// 盘点出库托盘回库完成
|
{
|
_asnPalletBindSvc.ArrivalSuccess(model.TaskNo, 0, "");
|
return Ok(new WcsReturnModel { StatusCode = 0, Msg = "入库完成" });
|
}
|
else if (model.TaskType == "2")//0:入库 1:出库 2:移库
|
{
|
_exNoticeSvc.RelocationSuccess(model.TaskNo, 0, "");
|
return Ok(new WcsReturnModel { StatusCode = 0, Msg = "盘点移库完成" });
|
}
|
break;
|
case "3"://移库完成任务、优化储位
|
if (model.TaskType == "3") //0:入库 1:出库 3:移库
|
{
|
//填写移库完成代码
|
}
|
break;
|
default:
|
return Ok(new WcsReturnModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" });
|
}
|
return Ok(new WcsReturnModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" });
|
}
|
catch (Exception ex)
|
{
|
return Ok(new WcsReturnModel { StatusCode = -1, Msg = ex.Message });
|
}
|
}
|
|
|
/// <summary>
|
/// WCS申请空托出库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult PalletLocation(WcsPalletModel model)
|
{
|
try
|
{
|
//记录log
|
var logStr = $@".\log\WCS\WCS申请空托盘" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
var jsonData = JsonConvert.SerializeObject(model);
|
LogFile.SaveLogToFile($"WCS申请空托盘物料号:( {jsonData} ),", logStr);
|
|
//获取空托盘所在库位
|
var list = _asnPalletBindSvc.PalletLocation(model.SkuNo,model.EndLocat);
|
|
return Ok(new
|
{
|
Success = "0",
|
Message = list == null ? "任务已申请!" : "",
|
TaskList = list
|
});
|
}
|
catch (Exception e)
|
{
|
//记录log
|
var logStr = $@".\log\WCS\WCS申请空托盘" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
//var jsonData = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(skuNo.ToString()));
|
LogFile.SaveLogToFile($"当前空托盘申请失败!,{e.Message}", logStr);
|
return Ok(new
|
{
|
Success = -1,
|
Message = e.Message
|
});
|
}
|
}
|
|
/// <summary>
|
/// WCS满放重新分配储位
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult ReLocation(RequestLocate model)
|
{
|
try
|
{
|
var logStr = $@".\log\WCS\WCS满放" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
//model.ManuFactureDate = DateTime.Now;
|
var jsonData = JsonConvert.SerializeObject(model);
|
LogFile.SaveLogToFile($"WCS满放:( {jsonData} ),", logStr);
|
var list = _asnPalletBindSvc.ReLocation(model);
|
return Ok(new { Success = 0, Message = "", TaskList = list });
|
}
|
catch (Exception e)
|
{
|
var logStr = $@".\log\WCS\WCS满放" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
LogFile.SaveLogToFile($"WCS满放:( {e.Message} ),", logStr);
|
return Ok(new { Success = -1, Message = e.Message });
|
}
|
}
|
|
//托盘箱码信息 自动码垛 (wcs提供)
|
|
//申请空托(自动码空托时用)
|
|
//车间叫料
|
|
/// <summary>
|
/// 每日清空日志
|
/// </summary>
|
/// <returns></returns>
|
/// <exception cref="Exception"></exception>
|
[HttpPost]
|
public IActionResult DeleteNlogFile()
|
{
|
try
|
{
|
string[] files = null;
|
try
|
{
|
files = Directory.GetFiles(_config.Get130log);
|
}
|
catch
|
{
|
try
|
{
|
files = Directory.GetFiles(_config.Get131log);
|
}
|
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);
|
}
|
}
|
|
[HttpPost]
|
public IActionResult UptTaskYouxian()
|
{
|
var list = _funSvc.GetFunSettingList("", "On", "Fun020");
|
return Ok(new
|
{
|
msg = list[0].FunSetName
|
});
|
}
|
|
#endregion
|
|
|
#region PDA
|
|
//空托指令下发(出库)
|
|
|
#endregion
|
|
}
|
}
|