using Microsoft.AspNetCore.Mvc;
|
using System;
|
using System.Security.Claims;
|
using Microsoft.Extensions.Options;
|
using Model;
|
using Model.ModelVm;
|
using Newtonsoft.Json;
|
using Utility.Tools;
|
using WMS.IBLL.IBllSoServer;
|
using Wms.Tools;
|
using Model.InterFaceModel;
|
using WMS.IBLL.IBllAsnServer;
|
using WMS.IBLL.IBllCheckServer;
|
using Model.ModelVm.BllCheckVm;
|
using Microsoft.Extensions.Logging;
|
using WMS.IBLL.IPdaServer;
|
using WMS.IBLL.IDataServer;
|
using Model.ModelDto.DataDto;
|
using System.Collections.Generic;
|
using Model.ModelDto.LogDto;
|
|
namespace Wms.Controllers
|
{
|
/// <summary>
|
/// 上游系统交互
|
/// </summary>
|
[Route("api/[controller]/[action]")]
|
[ApiController]
|
public class UpApiController : ControllerBase
|
{
|
#region 依赖注入
|
private readonly ApiUrlConfig _config; //接口交互路径
|
private readonly IExportNoticeServer _exNoticeSvc;//出库单Svc
|
private readonly IArrivalNoticeServer _arrivalNoticeSvc;
|
private readonly IStockCheckServer _stockCheckSvc;//盘点单Svc
|
private readonly IPdaCrServer _daCrSvc;//PDA
|
private readonly IStockServer _stock; //库存
|
public UpApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IArrivalNoticeServer arrivalNoticeServer, IStockCheckServer stockCheckSvc, IPdaCrServer daCrSvc, IStockServer stock)
|
{
|
_config = setting.Value;
|
_exNoticeSvc = exNoticeSvc;
|
_arrivalNoticeSvc = arrivalNoticeServer;
|
_stockCheckSvc = stockCheckSvc;
|
_daCrSvc = daCrSvc;
|
_stock = stock;
|
}
|
#endregion
|
|
#region 调用上游系统接口
|
/// <summary>
|
/// 入库单关闭
|
/// </summary>
|
/// <param name="model">入库单号</param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult CloseAsn(IdVm 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 = "未获取到当前操作人信息" });
|
}
|
_arrivalNoticeSvc.CloseArrivalNotice(model.Id, int.Parse(userId));
|
|
return Ok(new { code = 0, count = 0, msg = "入库单关单成功" });
|
}
|
catch (Exception e)
|
{
|
return Ok(new { code = 1, msg = e.Message });
|
}
|
}
|
/// <summary>
|
/// 入库单复核并回传
|
/// </summary>
|
/// <param name="model">入库单号</param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult FinishAsn(FinshVm 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 = "未获取到当前操作人信息" });
|
}
|
_arrivalNoticeSvc.FinishAsn(model.Id, _config.ErpHost + _config.AsnFinishUrl, _config.MesHost + _config.MesAsnFinishUrl, _config.MesHost + _config.MesGetTokenUrl, model.UserNo, model.Password, int.Parse(userId));
|
|
return Ok(new { code = 0, count = 0, msg = "入库单复核并上传成功" });
|
}
|
catch (Exception e)
|
{
|
return Ok(new { code = 1, msg = e.Message });
|
}
|
}
|
|
/// <summary>
|
/// 完成/关闭出库单据
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult CloseExportNotice(IdVm 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 = "未获取到当前操作人信息" });
|
}
|
_exNoticeSvc.CloseExportNotice(model.Id, int.Parse(userId));
|
|
return Ok(new { code = 0, count = 0, msg = "出库单关单成功" });
|
}
|
catch (Exception e)
|
{
|
return Ok(new { code = 1, msg = e.Message });
|
}
|
}
|
/// <summary>
|
/// //出库单复核并上传
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult FinishExportNotice(FinshVm 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 = "未获取到当前操作人信息" });
|
}
|
_exNoticeSvc.FinishSo(model.Id, _config.ErpHost + _config.SoFinishUrl, model.UserNo, model.Password, int.Parse(userId));
|
return Ok(new { code = 0, count = 0, msg = "出库单复核并上传成功" });
|
}
|
catch (Exception e)
|
{
|
return Ok(new { code = 1, msg = e.Message });
|
}
|
}
|
|
/// <summary>
|
/// 完成盘库单据 //盘库单调整库存反馈
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult FinishCr(AdjustStockCheckVm 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 = "未获取到当前操作人信息" });
|
}
|
bool bolls = false;
|
if (model.Origin == "0")
|
{
|
bolls = _stockCheckSvc.StockAdjust(model.Id, int.Parse(userId));
|
}
|
else
|
{
|
bolls = _stockCheckSvc.StockAdjustAuto(model.Id, int.Parse(userId));
|
}
|
if (bolls)
|
{
|
//系统对接后放开
|
//var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId));
|
//if (bl)
|
//{
|
return Ok(new { code = 0, count = 0, msg = "盘点单调整上传成功" });
|
//}
|
//return Ok(new { code = 1, count = 0, msg = "出库单关单成功但上传失败" });
|
}
|
|
return Ok(new { code = 1, msg = "盘点单调整失败" });
|
|
}
|
catch (Exception e)
|
{
|
return Ok(new { code = 1, msg = e.Message });
|
}
|
}
|
|
//箱码信息 手持组托用 (扫箱码向追溯要信息)
|
//
|
|
|
/// <summary>
|
/// 下发AGV调度任务
|
/// </summary>
|
/// <param name="type"></param>
|
/// <param name="taskno"></param>
|
/// <param name="positionStart"></param>
|
/// <param name="positionEnd"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult AGVTask(string type, string taskno, string positionStart, string positionEnd)
|
{
|
try
|
{
|
|
OutCommanAgvDto agvRequest = _daCrSvc.AGVTask(type, taskno, positionStart, positionEnd, _config.AgvHost + _config.GenAgvSchedulingTask);
|
if (agvRequest.Code != "0")
|
{
|
return Ok(new { code = 1, msg = "小车任务执行失败" });
|
}
|
|
return Ok(new { code = 1, msg = "AGV任务下发成功" });
|
|
}
|
catch (Exception e)
|
{
|
return Ok(new { code = 1, msg = e.Message });
|
}
|
}
|
|
/// <summary>
|
/// 下发AGV取消任务
|
/// </summary>
|
/// <param name="taskno"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult cancelTask(string taskno)
|
{
|
try
|
{
|
|
_daCrSvc.cancelTask(taskno, _config.AgvHost + _config.CancelTask);
|
return Ok(new { code = 1, msg = "AGV任务取消成功" });
|
|
}
|
catch (Exception e)
|
{
|
return Ok(new { code = 1, msg = e.Message });
|
}
|
}
|
|
#endregion
|
|
#region 被调上游调用接口
|
|
/// <summary>
|
/// 入库单据下发
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult CreateAsn(AsnInfo model)
|
{
|
// liudl Test
|
var result = new HttpReturnModel { Success = "-1", Message = "" };
|
var logStr = "";
|
if (model.Origin == "MES")
|
{
|
logStr = $@".\log\MES\入库单下发" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
}
|
else if (model.Origin == "ERP")
|
{
|
logStr = $@".\log\ERP\入库单下发" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
}
|
|
try
|
{
|
//log日志记录
|
if (logStr != "")
|
{
|
var jsonData = JsonConvert.SerializeObject(model);
|
LogFile.SaveLogToFile($"入库单下发:( {jsonData} ),", logStr);
|
}
|
|
result = _arrivalNoticeSvc.HttpCreateAsn(model, _config.WcsHost + _config.AddOrderTaskUrl);
|
if (logStr != "")
|
{
|
var jsonData = JsonConvert.SerializeObject(result);
|
LogFile.SaveLogToFile($"入库单下发返回参数:( {jsonData} ),", logStr);
|
}
|
return Ok(result);
|
}
|
catch (Exception e)
|
{
|
result.Message = e.Message;
|
if (logStr != "")
|
{
|
var jsonData = JsonConvert.SerializeObject(result);
|
LogFile.SaveLogToFile($"入库单下发返回参数:( {jsonData} ),", logStr);
|
}
|
return Ok(result);
|
}
|
}
|
|
/// <summary>
|
/// 出库单下发接口
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult CreateSo(SoInfo model)
|
{
|
var logStr = "";
|
if (model.Origin == "MES")
|
{
|
logStr = $@".\log\MES\出库单下发" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
}
|
else if (model.Origin == "ERP")
|
{
|
logStr = $@".\log\ERP\出库单下发" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
}
|
|
try
|
{
|
//log日志记录
|
if (logStr != "")
|
{
|
var jsonData = JsonConvert.SerializeObject(model);
|
LogFile.SaveLogToFile($"出库单下发:( {jsonData} ),", logStr);
|
}
|
|
_exNoticeSvc.HttpAddExportNotice(model);
|
|
var data = new HttpReturnModel { Success = "0", Message = "成功" };
|
|
if (logStr != "")
|
{
|
var jsonData = JsonConvert.SerializeObject(data);
|
LogFile.SaveLogToFile($"出库单下发返回参数:( {jsonData} ),", logStr);
|
}
|
|
return Ok(data);
|
|
|
}
|
catch (Exception e)
|
{
|
var data = new HttpReturnModel { Success = "-1", Message = "失败" + e.Message };
|
if (logStr != "")
|
{
|
var jsonData = JsonConvert.SerializeObject(data);
|
LogFile.SaveLogToFile($"出库单下发返回参数:( {jsonData} ),", logStr);
|
}
|
return Ok(data);
|
}
|
}
|
|
/// <summary>
|
/// 释放备料区储位状态JC24
|
/// </summary>
|
/// <param name="model">状态信息</param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult UpLocate(UpLocateModel model)
|
{
|
//记录log
|
var logStr = "";
|
if (model.Origin == "MES")
|
{
|
logStr = $@".\log\MES\释放备料区储位状态" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
}
|
try
|
{
|
if (logStr != "")
|
{
|
var jsonData = JsonConvert.SerializeObject(model);
|
LogFile.SaveLogToFile($"释放备料区储位状态:( {jsonData} ),", logStr);
|
}
|
_arrivalNoticeSvc.UpLocate(model.WareHouseNo, model.LocatNo);
|
|
var data = new HttpReturnModel { Success = "0", Message = "成功" };
|
|
if (logStr != "")
|
{
|
var jsonData = JsonConvert.SerializeObject(data);
|
LogFile.SaveLogToFile($"释放备料区储位状态返回参数:( {jsonData} ),", logStr);
|
}
|
return Ok(data);
|
|
}
|
catch (Exception e)
|
{
|
var data = new HttpReturnModel { Success = "0", Message = "失败:" + e.Message };
|
if (logStr != "")
|
{
|
var jsonData = JsonConvert.SerializeObject(data);
|
LogFile.SaveLogToFile($"释放备料区储位状态返回参数:( {jsonData} ),", logStr);
|
}
|
return Ok(data);
|
}
|
}
|
|
|
//质检结果下发接口
|
|
//物料信息接口
|
|
//客户信息接口
|
|
//单位信息接口
|
|
//包装信息接口
|
|
|
/// <summary>
|
/// 数字孪生系统库存质量状态反馈
|
/// </summary>
|
/// <param name="model">来源信息</param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult ReLocateData(DigitalTwinModel model)
|
{
|
//记录log
|
var logStr = "";
|
logStr = $@".\log\数字孪生\库位信息及质量状态反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
var jsonData = JsonConvert.SerializeObject(model);
|
LogFile.SaveLogToFile($"库位信息及质量状态反馈:( {jsonData} ),", logStr);
|
|
//获取库存信息
|
List<ReLocateDataModel> stocks = _stock.GetLocateList();
|
|
if (stocks.Count == 0)
|
{
|
var data = new HttpReturnModel { Success = "0", Message = "当前无库存" };
|
return Ok(data);
|
}
|
return Ok(stocks);
|
}
|
|
/// <summary>
|
/// 数字孪生系统库存质量状态反馈
|
/// </summary>
|
/// <param name="model">来源信息</param>
|
/// <returns></returns>
|
[HttpPost]
|
public IActionResult ReLogData(DigitalTwinModel model)
|
{
|
|
//记录log
|
var logStr = "";
|
logStr = $@".\log\数字孪生\操作日志信息反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
|
var jsonData = JsonConvert.SerializeObject(model);
|
LogFile.SaveLogToFile($"操作日志信息反馈:( {jsonData} ),", logStr);
|
try
|
{
|
//获取库存信息
|
List<OperationDto> stocks = _stock.ReLogData();
|
|
if (stocks.Count == 0)
|
{
|
var data = new HttpReturnModel { Success = "0", Message = "当前无操作信息" };
|
return Ok(data);
|
}
|
return Ok(stocks);
|
|
}
|
catch (Exception e)
|
{
|
var data = new HttpReturnModel { Success = "0", Message = "失败:" + e.Message };
|
if (logStr != "")
|
{
|
jsonData = JsonConvert.SerializeObject(data);
|
LogFile.SaveLogToFile($"操作日志信息反馈,返回参数:( {jsonData} ),", logStr);
|
}
|
return Ok(data);
|
}
|
|
}
|
|
#endregion
|
|
}
|
}
|