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