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 } }