| | |
| | | using WMS.Entity.BllTaskEntity; |
| | | using WMS.IBLL.IBllTaskServer; |
| | | using Model.ModelVm.BllTaskVm; |
| | | using static Model.InterFaceModel.RCSModel; |
| | | using WMS.IBLL.IBllTransServer; |
| | | using Microsoft.Extensions.Logging; |
| | | using ZXing.QrCode.Internal; |
| | | using Model.ModelVm.BllCheckVm; |
| | | |
| | | namespace Wms.Controllers |
| | | { |
| | |
| | | private readonly ITaskServer _taskSvc;//任务Svc |
| | | private readonly IBllTaskSyncServer _taskSyncSvc;//任务同步Svc |
| | | private readonly IWaveMageServer _waveSvc;//任务同步Svc |
| | | public DownApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc, IBllTaskSyncServer taskSyncSvc, IWaveMageServer waveSvc) |
| | | private readonly IRcsServer _rcsserver;//RCS相关任务 |
| | | private readonly INoticeServer _noticeSvc;//二楼单据相关 |
| | | public DownApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc, IBllTaskSyncServer taskSyncSvc, IWaveMageServer waveSvc, IRcsServer rcsserver, INoticeServer noticeSvc) |
| | | { |
| | | _config = setting.Value; |
| | | _exNoticeSvc = exNoticeSvc; |
| | |
| | | _taskSvc = taskSvc; |
| | | _taskSyncSvc = taskSyncSvc; |
| | | _waveSvc = waveSvc; |
| | | _rcsserver = rcsserver; |
| | | _noticeSvc = noticeSvc; |
| | | } |
| | | |
| | | #region WMS接口 调用下游系统接口 |
| | |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region 二楼业务 |
| | | /// <summary> |
| | | /// RCS叫桶 |
| | | /// </summary> |
| | | /// <param name="pallmsg"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult GetPalletNo(Pallnetmsg pallmsg) |
| | | { |
| | | var logStr = $@".\log\AGV\AGV申请叫桶" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | AgvResultModel resultModel = null;//返回信息 |
| | | try |
| | | { |
| | | var jsonData = JsonConvert.SerializeObject(pallmsg); |
| | | LogFile.SaveLogToFile($"AGV申请叫桶-请求报文:( {jsonData} ),", logStr); |
| | | |
| | | if (string.IsNullOrWhiteSpace(pallmsg.Location)) |
| | | { |
| | | resultModel = new AgvResultModel { code = "1", message = "叫料位置为空!", data = "", reqCode = "" }; |
| | | var jsonData3 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV申请叫桶-返回报文:( {jsonData3} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(pallmsg.Type)) |
| | | { |
| | | resultModel = new AgvResultModel { code = "1", message = "任务类型为空!", data = "", reqCode = "" }; |
| | | var jsonData4 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV申请叫桶-返回报文:( {jsonData4} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | string taskNo = ""; |
| | | //具体处理方法 |
| | | _rcsserver.GetPalletNo(pallmsg, _config.AgvHost + _config.GenAgvSchedulingTask, out taskNo); |
| | | |
| | | resultModel = new AgvResultModel { code = "0", message = "叫桶成功!", data = taskNo, reqCode = "" }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV申请叫桶-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | LogFile.SaveLogToFile($"AGV申请叫桶异常:( {e.Message} ),", logStr); |
| | | |
| | | resultModel = new AgvResultModel { code = "1", message = e.Message, data = "", reqCode = "" }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV申请叫桶-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// RCS申请储位 |
| | | /// </summary> |
| | | /// <param name="pallmsg"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult ApplyLocatNo(Pallnetmsg pallmsg) |
| | | { |
| | | var logStr = $@".\log\AGV\AGV申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | AgvResultModel resultModel = null;//返回信息 |
| | | try |
| | | { |
| | | var jsonData = JsonConvert.SerializeObject(pallmsg); |
| | | LogFile.SaveLogToFile($"AGV申请储位-请求报文:( {jsonData} ),", logStr); |
| | | |
| | | if (string.IsNullOrWhiteSpace(pallmsg.Location)) |
| | | { |
| | | resultModel = new AgvResultModel { code = "1", message = "申请位置为空!", data = "", reqCode = "" }; |
| | | var jsonData3 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData3} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(pallmsg.Type)) |
| | | { |
| | | resultModel = new AgvResultModel { code = "1", message = "任务类型为空!", data = "", reqCode = "" }; |
| | | var jsonData3 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData3} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | //if (string.IsNullOrWhiteSpace(pallmsg.PalletNo)) |
| | | //{ |
| | | // resultModel = new AgvResultModel { code = "1", message = "申请桶号为空!", data = "", reqCode = "" }; |
| | | // var jsonData3 = JsonConvert.SerializeObject(resultModel); |
| | | // LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData3} ),", logStr); |
| | | // return Ok(resultModel); |
| | | //} |
| | | string taskNo = ""; |
| | | //具体处理方法 |
| | | _rcsserver.ApplyLocatNo(pallmsg, _config.AgvHost + _config.GenAgvSchedulingTask, out taskNo); |
| | | |
| | | resultModel = new AgvResultModel { code = "0", message = "申请储位成功!", data = taskNo, reqCode = "" }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | LogFile.SaveLogToFile($"AGV申请储位异常:( {e.Message} ),", logStr); |
| | | |
| | | resultModel = new AgvResultModel { code = "1", message = e.Message, data = "", reqCode = "" }; |
| | | var jsonData3 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV申请储位-返回报文:( {jsonData3} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 将净桶改为脏桶并拉到脏桶区 |
| | | /// </summary> |
| | | /// <param name="pallmsg"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult ChangePalletStatus(Pallnetmsg pallmsg) |
| | | { |
| | | var result = new ErpModel { Success = -1, Message = "", }; |
| | | try |
| | | { |
| | | if (string.IsNullOrWhiteSpace(pallmsg.PalletNo)) |
| | | { |
| | | result.Message = "桶编号不能为空!"; |
| | | return Ok(result); |
| | | } |
| | | _rcsserver.ChangePalletStatus(pallmsg.PalletNo, _config.AgvHost + _config.GenAgvSchedulingTask); |
| | | result.Success = 0; |
| | | result.Message = "操作成功!"; |
| | | return Ok(result); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | result.Message = e.Message; |
| | | return Ok(result); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// MES下发清洗锁定脏桶 |
| | | /// </summary> |
| | | /// <param name="pallmsg"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult CleanPallet(Pallnetmsg pallmsg) |
| | | { |
| | | var result = new ErpModel { Success = -1, Message = "", }; |
| | | try |
| | | { |
| | | if (string.IsNullOrWhiteSpace(pallmsg.Location)) |
| | | { |
| | | result.Message = "叫料位置为空!"; |
| | | return Ok(result); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(pallmsg.PalletNo)) |
| | | { |
| | | result.Message = "桶号为空!"; |
| | | return Ok(result); |
| | | } |
| | | _rcsserver.CleanPallet(pallmsg, _config.AgvHost + _config.GenAgvSchedulingTask); |
| | | result.Success = 0; |
| | | result.Message = "叫桶成功!"; |
| | | return Ok(result); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | result.Message = e.Message; |
| | | return Ok(result); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 入库单据下发 |
| | | /// </summary> |
| | | /// <param name="model">入库单信息</param> |
| | | /// <returns></returns> |
| | | //[Authorize] |
| | | [HttpPost] |
| | | public IActionResult CreateAsnWork(AsnInfo model) |
| | | { |
| | | var result = new ErpModel { Success = -1, Message = "" }; |
| | | try |
| | | { |
| | | /*var claimsIdentity = this.User.Identity as ClaimsIdentity; |
| | | if (claimsIdentity == null) |
| | | { |
| | | throw new Exception("未获取到用户信息"); |
| | | } |
| | | string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; |
| | | if (string.IsNullOrWhiteSpace(UserId)) |
| | | { |
| | | throw new Exception("未获取到用户信息"); |
| | | }*/ |
| | | |
| | | result = _noticeSvc.CreateAsnWork(model); |
| | | |
| | | return Ok(result); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | result.Message = e.Message; |
| | | return Ok(result); |
| | | } |
| | | } |
| | | |
| | | |
| | | #region Agv任务完成反馈 |
| | | /// <summary> |
| | | /// 任务开始 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult start(AgvTaskDto model) |
| | | { |
| | | //记录log |
| | | var logStr = $@".\log\AGV\任务执行通知" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | AgvResultModel resultModel = null;//返回信息 |
| | | try |
| | | { |
| | | var jsonData = JsonConvert.SerializeObject(model); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务开始-请求报文:( {jsonData} ),", logStr); |
| | | |
| | | //具体处理方法 |
| | | |
| | | |
| | | |
| | | resultModel = new AgvResultModel { code = "0", message = "成功", reqCode = model.reqCode }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务开始-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务开始-异常:( {ex.Message} ),", logStr); |
| | | |
| | | resultModel = new AgvResultModel { code = "1", message = ex.Message, reqCode = model.reqCode }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务开始-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 走出储位 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult outbin(AgvTaskDto model) |
| | | { |
| | | //记录log |
| | | var logStr = $@".\log\AGV\任务执行通知" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | AgvResultModel resultModel = null;//返回信息 |
| | | try |
| | | { |
| | | var jsonData = JsonConvert.SerializeObject(model); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-走出储位-请求报文:( {jsonData} ),", logStr); |
| | | |
| | | //具体处理方法 |
| | | |
| | | |
| | | |
| | | resultModel = new AgvResultModel { code = "0", message = "成功", reqCode = model.reqCode }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-走出储位-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-走出储位-异常:( {ex.Message} ),", logStr); |
| | | |
| | | resultModel = new AgvResultModel { code = "1", message = ex.Message, reqCode = model.reqCode }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-走出储位-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 任务结束 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult end(AgvTaskDto model) |
| | | { |
| | | //记录log |
| | | var logStr = $@".\log\AGV\任务执行通知" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | AgvResultModel resultModel = null;//返回信息 |
| | | try |
| | | { |
| | | var jsonData = JsonConvert.SerializeObject(model); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-请求报文:( {jsonData} ),", logStr); |
| | | |
| | | //具体处理方法 |
| | | _rcsserver.RCSFinishTask(model.taskCode, "1", "AGV"); |
| | | |
| | | |
| | | resultModel = new AgvResultModel { code = "0", message = "成功", reqCode = model.reqCode }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-异常:( {ex.Message} ),", logStr); |
| | | |
| | | resultModel = new AgvResultModel { code = "1", message = ex.Message, reqCode = model.reqCode }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 任务单取消 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult cancel(AgvTaskDto model) |
| | | { |
| | | //记录log |
| | | var logStr = $@".\log\AGV\任务执行通知" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | AgvResultModel resultModel = null;//返回信息 |
| | | try |
| | | { |
| | | var jsonData = JsonConvert.SerializeObject(model); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-请求报文:( {jsonData} ),", logStr); |
| | | |
| | | //具体处理方法 |
| | | |
| | | |
| | | |
| | | resultModel = new AgvResultModel { code = "0", message = "成功", reqCode = model.reqCode }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-异常:( {ex.Message} ),", logStr); |
| | | |
| | | resultModel = new AgvResultModel { code = "1", message = ex.Message, reqCode = model.reqCode }; |
| | | var jsonData2 = JsonConvert.SerializeObject(resultModel); |
| | | LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-返回报文:( {jsonData2} ),", logStr); |
| | | return Ok(resultModel); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | /// <summary> |
| | | /// 出库单据下发 |
| | | /// </summary> |
| | | /// <param name="model">出库单信息</param> |
| | | /// <returns></returns> |
| | | //[Authorize] |
| | | [HttpPost] |
| | | public IActionResult CreateSoWork(SoInfo model) |
| | | { |
| | | try |
| | | { |
| | | /*var claimsIdentity = this.User.Identity as ClaimsIdentity; |
| | | if (claimsIdentity == null) |
| | | { |
| | | throw new Exception("未获取到用户信息"); |
| | | } |
| | | string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; |
| | | if (string.IsNullOrWhiteSpace(UserId)) |
| | | { |
| | | throw new Exception("未获取到用户信息"); |
| | | }*/ |
| | | |
| | | SoResInfo result = _noticeSvc.CreateSoWork(model); |
| | | return Ok(result); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new ErpModel { Success = -1, Message = e.Message }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 手动下发小车任务 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult SendAgvTaskWms(CheckTaskVm 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 = "未获取到当前操作人信息" }); |
| | | } |
| | | _rcsserver.DownTask(model.taskNo, int.Parse(userId), _config.AgvHost + _config.GenAgvSchedulingTask); |
| | | |
| | | return Ok(new { code = 0, msg = "重新下发已完成", data = "" }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 手动完成小车任务 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult FinshAgvTaskWms(CheckTaskVm 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 = "未获取到当前操作人信息" }); |
| | | } |
| | | //具体处理方法 |
| | | _rcsserver.RCSFinishTask(model.taskNo, "1", "WMS"); |
| | | |
| | | return Ok(new { code = 0, msg = "重新下发已完成", data = "" }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 手动取消AGV移库任务 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | public IActionResult CancelAgvTaskWms(CheckTaskVm 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 = "未获取到当前操作人信息" }); |
| | | } |
| | | _rcsserver.CancelTask(model.taskNo, int.Parse(userId)); |
| | | |
| | | return Ok(new { code = 0, msg = "成功取消任务", data = "" }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return Ok(new { code = 1, msg = e.Message }); |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | } |