chengsc
2024-10-30 0653b5bee559d54fe8ac519aa98115e6a8aa31b0
Wms/Wms/Controllers/DownApiController.cs
@@ -13,6 +13,9 @@
using WMS.IBLL.IBllSoServer;
using WMS.IBLL.ILogServer;
using Wms.Tools;
using System.Collections.Generic;
using Model.ModelVm.PdaVm;
using WMS.IBLL.IPdaServer;
namespace Wms.Controllers
{
@@ -28,13 +31,16 @@
        private readonly IPalletBindServer _asnPalletBindSvc;//托盘绑定Svc 
        private readonly IStockCheckServer _crCheckSvc;//托盘绑定Svc 
        private readonly ITaskServer _taskSvc;//任务Svc 
        public DownApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc)
        private readonly IPdaSoServer _pdaSoSvc;//空托出库Svc
        public DownApiController(IOptions<ApiUrlConfig> setting, IExportNoticeServer exNoticeSvc, IPalletBindServer asnPalletBindSvc, IStockCheckServer crCheckSvc, ITaskServer taskSvc, IPdaSoServer pdaSoSvc)
        {
            _config = setting.Value;
            _exNoticeSvc = exNoticeSvc;
            _asnPalletBindSvc = asnPalletBindSvc;
            _crCheckSvc = crCheckSvc;
            _taskSvc = taskSvc;
            _pdaSoSvc = pdaSoSvc;
        }
        #region WMS接口 调用下游系统接口 
@@ -49,7 +55,7 @@
        /// <returns></returns>
        [Authorize]
        [HttpGet]
        public IActionResult IssueOutHouse(string soNo,string unstackingMode, string outMode,string loadingAddre)
        public IActionResult IssueOutHouse(string soNo, string unstackingMode, string outMode, string loadingAddre)
        {
            try
            {
@@ -70,10 +76,10 @@
                //    return Ok(new { code = 1, msg = "请选择出库口" });
                //}
                var list = _exNoticeSvc.IssueOutHouse(soNo,unstackingMode, outMode,loadingAddre, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl,out string str);
                return Ok(new { code = 0, msg = str , data = list });
                var list = _exNoticeSvc.IssueOutHouse(soNo, unstackingMode, outMode, loadingAddre, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str);
                return Ok(new { code = 0, msg = str, data = list });
            }
            catch (Exception e)
            {
@@ -87,7 +93,7 @@
        /// <param name="taskNo"></param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult AgainSendSoTask(string taskNo)
        public IActionResult AgainSendSoTask(string taskNo,string Receiver)
        {
            try
            {
@@ -102,8 +108,20 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var list = _exNoticeSvc.AgainSendSoTask(taskNo, int.Parse(userId),_config.WcsHost + _config.IssueComApiUrl2);
                //var list = _exNoticeSvc.AgainSendSoTask(taskNo, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl2);
                OutCommandDto list = new OutCommandDto();
                if (Receiver == "WCS")
                {
                    //需判断AGV或WCS的出库任务
                    //wcs
                    list = _exNoticeSvc.AgainSendSoTask(taskNo, Receiver, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl2);
                }
                else if(Receiver == "AGV")
                {
                    //agv
                    list = _exNoticeSvc.AgainSendSoTask(taskNo, Receiver, int.Parse(userId), _config.WcsHost + _config.ContinueTask);
                }
                return Ok(new { code = 0, msg = "重新下发已完成", data = list });
@@ -122,7 +140,7 @@
        /// <returns></returns>
        [Authorize]
        [HttpGet]
        public IActionResult CheckOutHouse(string crNo,string outMode)
        public IActionResult CheckOutHouse(string crNo, string outMode)
        {
            try
            {
@@ -138,7 +156,7 @@
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var list = _crCheckSvc.CheckOutHouse(crNo, outMode,int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str);
                var list = _crCheckSvc.CheckOutHouse(crNo, outMode, int.Parse(userId), _config.WcsHost + _config.IssueComApiUrl, out string str);
                return Ok(new { code = 0, msg = str, data = list });
@@ -185,7 +203,7 @@
        #region WMS接口 被下游系统接口调用
        /// <summary>
        /// 申请储位
        /// 申请巷道
        /// </summary>
        /// <param name="model">入库单信息</param>
        /// <returns></returns>
@@ -194,25 +212,43 @@
        public IActionResult RequestRoadWay(RequestLocate model)
        {
            var logStr = "";
            logStr = $@".\log\WCS\WCS申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
            {
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"WCS申请巷道:( {jsonData} ),", logStr);
                var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo );
                if (model.TaskModel == "1")
                {
                    var list = _asnPalletBindSvc.RequestRoadWayModel(model.PalletNo, model.HouseNo);
                LogFile.SaveLogToFile($"WCS申请储位返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list });
                    LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo,
                        "申请巷道", $"申请巷道托盘号:{model.PalletNo}的成功信息", 2);
                    return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list });
                }
                else
                {
                    var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo);
                    LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8),
                        "申请巷道", $"申请巷道托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2);
                    return Ok(new { Success = 0, Message = "申请巷道成功", TaskList = list });
                }
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS申请巷道返回:( {e.Message} ),", logStr);
                new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo,
                    "申请巷道", $"申请巷道托盘号:{model.PalletNo}的失败信息", 2);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
@@ -249,7 +285,7 @@
            {
                logStr = $@".\log\WCS\WCS申请储位" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            }
            try
            {
                if (model.PalletNo.Length == 9)
@@ -261,39 +297,43 @@
                {
                    var jsonData = JsonConvert.SerializeObject(model);
                    LogFile.SaveLogToFile($"WCS申请储位:( {jsonData} ),", logStr);
                }
                string pallet = model.PalletNo.Substring(0, 8);
                var list = _asnPalletBindSvc.RequestLocation(pallet, model.HouseNo,model.RoadwayNo);
                OutCommandDto list;
                if (model.TaskModel == "1")
                {
                    list = _asnPalletBindSvc.RequestLocationModel(pallet, model.HouseNo, model.RoadwayNo);
                }
                else
                {
                    list = _asnPalletBindSvc.RequestLocation(pallet, model.HouseNo, model.RoadwayNo);
                }
                if (model.PalletNo.Length == 9)
                {
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的成功信息",2);// int.Parse(userId)
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2);// int.Parse(userId)
                    LogFile.SaveLogToFile($"WMS申请储位成功:( {JsonConvert.SerializeObject(list)} ),", logStr);
                }
                else if (model.PalletNo.Length == 8)
                {
                    LogFile.SaveLogToFile($"WCS申请储位返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                }
                if (model.PalletNo.Length == 9)
                {
                }
                return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list });
            }
            catch (Exception e)
            {
                if (model.PalletNo.Length == 9)
                {
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0,8)}的失败信息", 2);//int.Parse(userId)
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8), "申请储位", $"申请储位托盘号:{model.PalletNo.Substring(0, 8)}的失败信息", 2);//int.Parse(userId)
                    LogFile.SaveLogToFile($"WMS申请储位失败返回:( {e.Message} ),", logStr);
                }
                else if(model.PalletNo.Length == 8)
                else if (model.PalletNo.Length == 8)
                {
                    LogFile.SaveLogToFile($"WCS申请储位返回:( {e.Message} ),", logStr);
                }
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
@@ -324,15 +364,20 @@
                    case "0"://入库完成任务
                        if (model.TaskType == "0")//0:入库 1:出库 2:移库
                        {
                            _asnPalletBindSvc.ArrivalSuccess(model.TaskNo,0);
                            _asnPalletBindSvc.ArrivalSuccess(model.TaskNo, 0);
                            return Ok(new WcsModel { StatusCode = 0, Msg = "入库完成" });
                        }
                        break;
                    case "1"://出库完成任务
                        if (model.TaskType == "1")//0:入库 1:出库 2:移库
                        {
                            _exNoticeSvc.ExportSuccess(model.TaskNo,0);
                            _exNoticeSvc.ExportSuccess(model.TaskNo, 0);
                            return Ok(new WcsModel { StatusCode = 0, Msg = "出库完成" });
                        }
                        else if (model.TaskType == "2")
                        {
                            _exNoticeSvc.RelocationSuccess(model.TaskNo, 0);
                            return Ok(new WcsModel { StatusCode = 0, Msg = "移库完成" });
                        }
                        break;
                    case "2"://盘库完成任务
@@ -353,8 +398,8 @@
                            //填写移库完成代码
                        }
                        break;
                    default :
                        return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" });
                    default:
                        return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" });
                }
                return Ok(new WcsModel { StatusCode = -1, Msg = "传递的任务状态为失败状态" });
            }
@@ -370,7 +415,7 @@
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IActionResult EmptyException(ReceiveWcsSignal model)
        public IActionResult EmptyException(ReceiveWcsSignal model)
        {
            var logStr = $@".\log\WCS\异常反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
@@ -381,7 +426,7 @@
                var bl = _exNoticeSvc.EmptyException(model);
                LogFile.SaveLogToFile($"空取异常:(执行结果成功),", logStr);
                return Ok(new { Success = 0, Message = ""});
                return Ok(new { Success = 0, Message = "" });
            }
            catch (Exception e)
            {
@@ -395,7 +440,7 @@
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IActionResult FullException(ReceiveWcsSignal model)
        public IActionResult FullException(ReceiveWcsSignal model)
        {
            var logStr = $@".\log\WCS\异常反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
@@ -460,13 +505,150 @@
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 自动码垛绑定信息返回巷道口
        /// </summary>
        /// <param name="model">入库单信息</param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        public IActionResult BindRequestRoadWay(BoxPalletBindVm model)
        {
            var logStr = $@".\log\WCS\WCS托盘绑定-申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
        //托盘箱码信息 自动码垛 (wcs提供)
            try
            {
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道:( {jsonData} ),", logStr);
                _asnPalletBindSvc.BindPalletStock(model, 0);
                //申请巷道
                var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, "W01");
                LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                return Ok(new { Success = 0, Message = "托盘绑定-申请巷道成功", TaskList = list });
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS托盘绑定-申请巷道返回:( {e.Message} ),", logStr);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
        /// <summary>
        /// WCS申请空托出库
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        public IActionResult IssuePlnOutHouseWcs(OutModePalletVm model)
        {
            var logStr = $@".\log\WCS\WCS申请空托出库" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
            {
                List<OutCommandDto> _list = _pdaSoSvc.IssuePlnOutHouseWcs(model,0);
                return Ok(new { Success = 0, Message = "空托盘出库成功", TaskList = _list });
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS申请空托出库异常返回:( {e.Message} ),", logStr);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
        ///// <summary>
        ///// 成品箱码拆垛拣货
        ///// </summary>
        ///// <param name="model">入库单信息</param>
        ///// <returns></returns>
        //[AllowAnonymous]
        //[HttpPost]
        //public IActionResult BoxUnstackd(BoxPickList model)
        //{
        //    var logStr = $@".\log\WCS\WCS成品箱码拆垛" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
        //    try
        //    {
        //        var jsonData = JsonConvert.SerializeObject(model);
        //        LogFile.SaveLogToFile($"WCS成品箱码拆垛:( {jsonData} ),", logStr);
        //        _comeSvc.BoxUnstackd(model.PalletNo, model.BoxList);
        //        var list = new { Success = 0, Message = "成品箱码拆垛" };
        //        LogFile.SaveLogToFile($"WCS成品箱码拆垛返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
        //        return Ok(list);
        //    }
        //    catch (Exception e)
        //    {
        //        LogFile.SaveLogToFile($"WCS成品箱码拆垛:( {e.Message} ),", logStr);
        //        return Ok(new ErpModel { Success = -1, Message = e.Message });
        //    }
        //}
        //申请空托(自动码空托时用)
        //车间叫料
        #region AGV
        /// <summary>
        ///  任务执行通知接口
        ///  AGV 执行回调的方法,包含任务开始,走出储位,任务完成及任务取消。
        ///  取消通知为任务单,其他通知为单个任务组或子任务。注意:是否通知需要在任务模板配置
        /// </summary>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        [HttpPost]
        public IActionResult AgvCallback(AgvContinueTask model)
        {
            try
            {
                //记录log
                var logStr = $@".\log\AGV\任务反馈" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"AGV任务反馈执行通知:( {jsonData} ),", logStr);
                //接收时间
                var time1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                var orderType = _taskSvc.GetTaskOrderType(model.TaskCode);// 判断单据类型入出移
                var taskType = _taskSvc.GetTaskType(model.TaskCode);//根据任务号获取任务类型
                switch (orderType)
                {
                    case "0"://入库任务执行
                    case "1"://出库任务执行
                    case "2"://盘库任务执行
                    case "3"://移库任务执行
                        return Ok(new OutCommanAgvDto { Code = "0", Message = "成功", ReqCode = model.ReqCode });
                    default:
                        return Ok(new OutCommanAgvDto { Code = "1", Message = "失败", ReqCode = model.ReqCode });
                }
            }
            catch (Exception ex)
            {
                return Ok(new WcsModel
                {
                    StatusCode = -1,
                    Msg = ex.Message
                });
            }
        }
        #endregion
        #endregion