StationPRExcute.cs 8.53 KB
using System.Linq;

namespace HH_WCS_Standard
{
    public class StationPRExcute : I_Excute
    {
        public VM_StationPR vM_StationPR;
        public VM_StationACK vM_StationACK;
        private I_Device device;
        private BaseBll _bll = new BaseBll();

        public StationPRExcute(F_ServiceModel f_ServiceModel) : base(f_ServiceModel)
        {
            vM_StationPR = f_ServiceModel.vM_ReadModel as VM_StationPR;
            vM_StationACK = f_ServiceModel.vM_WriteModel as VM_StationACK;
            device = f_ServiceModel.device;
        }

        public override BllResult Excute()
        {
            if (vM_StationPR.MessageID != 0 && vM_StationACK.MessageID == 0)
            {
                //地址到达,输送线请求

                //查找托盘号对应的任务,找不到返回报错
                var task = App.taskList.FirstOrDefault(a => a.PalletOrBoxNo == vM_StationPR.PalletID && a.ToPlace == device.Code &&
                    (a.NextState == E_TaskState.响应出入口地址到达.GetIndexInt() || a.NowState == E_TaskState.响应出入口地址到达.GetIndexInt()
                    || a.NextState == E_TaskState.响应中转站台地址到达.GetIndexInt() || a.NowState == E_TaskState.响应中转站台地址到达.GetIndexInt()
                        || a.NowState == E_TaskState.任务创建.GetIndexInt()
                    ));
                if (task != null)
                {
                    if (task.NowState == E_TaskState.响应出入口地址到达.GetIndexInt() || task.NowState == E_TaskState.响应中转站台地址到达.GetIndexInt())
                    {
                        //if (task.NowState == E_TaskState.响应出入口地址到达.GetIndexInt() && task.Type == E_TaskType.分拣出库.GetIndexString())
                        //{
                        //    LogExecute.logNet.WriteDebug($"到达操作口任务回传WMS,任务号{task.tNo}");
                        //    var result = _bll.TaskStatusFeedBackExcute(task);
                        //    if (!result.Success)
                        //    {
                        //        LogExecute.logNet.WriteError($"到达操作口任务回传WMS失败,任务号{task.tNo},错误原因{result.Msg}");
                        //        return BllResult.Error();
                        //    }
                        //    LogExecute.logNet.WriteDebug($"到达操作口任务回传WMS成功,任务号{task.tNo}");
                        //}
                        vM_StationACK.MessageID = 8;
                        vM_StationACK.LoadingStatus = 1;
                        vM_StationACK.ScannerNr = vM_StationPR.ScannerNr;
                        var sendtask_send = this.PutWriteAddress();
                        if (sendtask_send.Success)
                        {
                            LogExecute.logNet.WriteDebug($"响应{device.Name}站台地址到达成功,任务号{task.tNo}");
                            return BllResult.Sucess();
                        }
                        else
                        {
                            LogExecute.logNet.WriteError($"响应{device.Name}站台地址到达失败(出现异常),任务号{task.tNo},错误原因是{sendtask_send.Msg}");
                            return BllResult.Error();
                        }
                    }
                    else if (task.NextState == E_TaskState.响应出入口地址到达.GetIndexInt() || task.NextState == E_TaskState.响应中转站台地址到达.GetIndexInt())
                    {
                        #region 申请仓位待定

                        ////请求WMS仓位
                        //if (device.Code == "InStationA01" && task.tNo_WMS != "999999999" && task.ExitPlace == "WareCell")
                        //{
                        //    var wareresult = _bll.GetWareCell(task);
                        //    if (!wareresult.Success)
                        //    {
                        //        LogExecute.logNet.WriteError($"响应{device.Name}站台地址到达失败(请求仓位失败),任务号{task.tNo},{wareresult.Msg}");
                        //        return BllResult.Error();
                        //    }
                        //}

                        #endregion 申请仓位待定

                        //if (task.NextState == E_TaskState.响应出入口地址到达.GetIndexInt() && task.Type == E_TaskType.分拣出库.GetIndexString())
                        //{
                        //    LogExecute.logNet.WriteDebug($"到达操作口任务回传WMS,任务号{task.tNo}");
                        //    var result = _bll.TaskStatusFeedBackExcute(task);
                        //    if (!result.Success)
                        //    {
                        //        LogExecute.logNet.WriteError($"到达操作口任务回传WMS失败,任务号{task.tNo},错误原因{result.Msg}");
                        //        return BllResult.Error();
                        //    }
                        //    LogExecute.logNet.WriteDebug($"到达操作口任务回传WMS成功,任务号{task.tNo}");
                        //}
                        vM_StationACK.MessageID = 8;
                        vM_StationACK.LoadingStatus = 1;
                        vM_StationACK.ScannerNr = vM_StationPR.ScannerNr;
                        BaseDal<I_Task> baseDal = new BaseDal<I_Task>();
                        baseDal.BeginTran();
                        var sendtask_update = _bll.NextStateChange(task, baseDal);
                        if (sendtask_update.Success)
                        {
                            var sendtask_send = this.PutWriteAddress();
                            if (sendtask_send.Success)
                            {
                                baseDal.CommitTran();
                                _bll.NextStateChangeCache(task);
                                LogExecute.logNet.WriteDebug($"响应{device.Name}站台地址到达成功,任务号{task.tNo}");
                                return BllResult.Sucess();
                            }
                            else
                            {
                                baseDal.RollbackTran();
                                LogExecute.logNet.WriteError($"响应{device.Name}站台地址到达失败(发送失败),任务号{task.tNo}");
                                return BllResult.Error();
                            }
                        }
                        else
                        {
                            baseDal.RollbackTran();
                            LogExecute.logNet.WriteError($"响应{device.Name}站台地址到达失败(更新数据库失败),任务号{task.tNo}");
                            return BllResult.Error();
                        }
                    }
                    else if (task.NowState == E_TaskState.任务创建.GetIndexInt())
                    {
                        vM_StationACK.MessageID = 8;
                        vM_StationACK.LoadingStatus = 1;
                        vM_StationACK.ScannerNr = vM_StationPR.ScannerNr;
                        var sendtask_send = this.PutWriteAddress();
                        if (sendtask_send.Success)
                        {
                            LogExecute.logNet.WriteDebug($"响应{device.Name}站台地址到达成功(称重超重回退),任务号{task.tNo}");
                            return BllResult.Sucess();
                        }
                        else
                        {
                            LogExecute.logNet.WriteError($"响应{device.Name}站台地址到达失败,称重回退(发送失败),任务号{task.tNo}");
                            return BllResult.Error();
                        }
                    }
                    else
                        LogExecute.logNet.WriteError($"响应{device.Name}站台到达,任务数据不存在");
                    return BllResult.Error();
                }
                else
                {
                    LogExecute.logNet.WriteError($"响应{device.Name}站台地址到达失败,未找到对应托盘{vM_StationPR.PalletID}的任务");
                    return BllResult.Error();
                }
            }
            else if (vM_StationPR.MessageID == 0 && vM_StationACK.MessageID != 0)
            {
                //已经回复,待清除
                var clearresult = PutEmptyAddress();
                return BllResult.Sucess();
            }
            else
            {
                return BllResult.Sucess();
            }
        }
    }
}