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
{
///
/// 上游系统交互
///
[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 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 调用上游系统接口
///
/// 入库单关闭
///
/// 入库单号
///
[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 });
}
}
///
/// 入库单复核并回传
///
/// 入库单号
///
[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 });
}
}
///
/// 完成/关闭出库单据
///
///
///
[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 });
}
}
///
/// //出库单复核并上传
///
///
///
[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 });
}
}
///
/// 完成盘库单据 //盘库单调整库存反馈
///
///
///
[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 });
}
}
//箱码信息 手持组托用 (扫箱码向追溯要信息)
//
///
/// 下发AGV调度任务
///
///
///
///
///
///
[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 });
}
}
///
/// 下发AGV取消任务
///
///
///
[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 被调上游调用接口
///
/// 入库单据下发
///
/// 入库单信息
///
[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);
}
}
///
/// 出库单下发接口
///
/// 入库单信息
///
[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);
}
}
///
/// 释放备料区储位状态JC24
///
/// 状态信息
///
[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);
}
}
//质检结果下发接口
//物料信息接口
//客户信息接口
//单位信息接口
//包装信息接口
///
/// 数字孪生系统库存质量状态反馈
///
/// 来源信息
///
[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 stocks = _stock.GetLocateList();
if (stocks.Count == 0)
{
var data = new HttpReturnModel { Success = "0", Message = "当前无库存" };
return Ok(data);
}
return Ok(stocks);
}
///
/// 数字孪生系统库存质量状态反馈
///
/// 来源信息
///
[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 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
}
}