using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
using WCS.Data;
using WCS.Data.Models;
using WCS.PLC;
using WCS.PLC.Model.Equipment;
namespace WCS.Workflow
{
    public class Rgv01 : Base_DualRgv
    {
        #region Constructor
        public Rgv01(string rgvPosOne, string rgvPosTwo)
            : base(rgvPosOne, rgvPosTwo)
        {
        }
        #endregion;
        #region Method
        #region RGV任务完成
        protected override void Rgv_Complete()
        {
            base.Rgv_Complete();
        }
        #endregion;
        /// 
        /// 写入任务到穿梭车
        /// 
        /// Rgv写入信号
        protected override void WriteTaskToRgv(WCSWriteToRgvSignal rgvwrite)
        {
            var task = Current.TaskSet.FirstOrDefault(v => v.TASK_NO == rgvwrite.Tasknum);
            if (rgvwrite.TaskType == 1 && task.TASK_COMTYPE == 1)
            {
                if (Rgv.DB521_Res2_2 > 0)
                {
                    throw new Exception(string.Format("任务[{0}]外检高度PLC值[DB521_Res2_2]未清零,不能执行上料动作。", rgvwrite.Tasknum));
                }
                //写入是否冰箱标识
                rgvwrite.RES1 = string.IsNullOrWhiteSpace(task.TASK_ITEM2) ? 0 : Convert.ToInt32(task.TASK_ITEM2);
            }
            //获取高度
            if (rgvwrite.TaskType == 2 && task.TASK_COMTYPE == 1)
            {
                if (Rgv.DB521_Res2_2 > 0)
                {
                    string res2 = Rgv.DB521_Res2_2.ToString();
                    SugarBase.DB.Updateable(it => new WCS_TASK() { TASK_ITEM1 = res2 })
                             .Where(it => it.TASK_NO == task.TASK_NO)
                             .ExecuteCommand();
                }
                else
                {
                    throw new Exception(string.Format("任务[{0}]外检高度PLC未给值。", rgvwrite.Tasknum));
                }
            }
            base.WriteTaskToRgv(rgvwrite);
        }
        #region 穿梭车上料条件检测
        protected override bool Rgv_OnMatCheckTask(WCS_TASK onTask, RgvPosEnum rgvPos, string onMatSition)
        {
            bool result = true;
            if (onMatSition != "1180" && onMatSition != "1190")
            {
                var rgvoutininfo = Current.WCS_RGVOutInInfoSet.FirstOrDefault(v => v.RGVOUTIN_CONVNO == onMatSition);
                var cv = ConveyorHelper.GetConveyorSignal(rgvoutininfo.PLCNAME, onMatSition);
                if (cv.DB521_H_Outside)
                {
                    result = false;
                }
            }
            return result;
            //return base.Rgv_OnMatCheckTask(onTask, rgvPos, onMatSition);
        }
        #endregion;
        #region 穿梭车下料条件检测 
        protected override bool Rgv_UpMatCheckTask_QueryEndPos(WCS_TASK upTask, RgvPosEnum rgvPos, string upMatSition)
        {
            return base.Rgv_UpMatCheckTask_QueryEndPos(upTask, rgvPos, upMatSition);
        }
        #endregion; 
        #region 其它功能 
        protected override void Rgv_OtherExtend()
        {
        }
        #endregion;
        /// 
        /// RGV外检超高记录信息
        /// 
        internal void RgvResetTask()
        {
            try
            {
                //超高报警
                //if (Rgv.DB521_Res1_2 == 1)
                //{
                //    //调用sp完成任务
                //    TryCachHelper.TryExecute((db) =>
                //    {
                //        BaseWorkflow.AddLedErrorMsg(db, RgvName, "货物超高", Rgv.DB521_TaskID_2);
                //        //var task = db.Queryable().First(v => v.TASK_NO == Rgv.DB521_TaskID_2 && (v.TASK_COMTYPE == 1 || v.TASK_COMTYPE == 4 || v.TASK_COMTYPE == 5));
                //        //if (task != null)
                //        //{
                //        //    if (task.TASK_RGVNO == RgvName ||
                //        //        task.TASK_WKSTATUS == (int)WkStatus.RGV上料执行 ||
                //        //        task.TASK_WKSTATUS == (int)WkStatus.输送机执行 ||
                //        //        task.TASK_WKSTATUS == (int)WkStatus.RGV下料执行)
                //        //    {
                //        //        db.Updateable(it => new WCS_TASK() { TASK_WKSTATUS = 0, TASK_RGVNO = "", TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
                //        //          .Where(it => it.TASK_NO == task.TASK_NO)
                //        //          .ExecuteCommand();
                //        //        //添加明细
                //        //        string msg = string.Format("穿梭车[{0}]任务[{1}]外检故障,重置任务。", RgvName, task.TASK_NO);
                //        //        CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, msg);
                //        //    }
                //        //}
                //    });
                //}
            }
            catch (Exception ex)
            {
                Log4netHelper.Logger_Error.ErrorFormat(ex.ToString());
            }
        }
        #endregion;
    }
}