using System;
using System.Data;
using System.Collections;

using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
using bizFacade;

namespace MesServerWork
{
    public partial class MIS_BASE
    {
        static object lockerEngineTypeGetOver_PLC_Work = new object();


        static public void EngineTypeGetOver_PLC_Work(string OpName, int EngineTypeID, string EngineType, string EngineID, int PartPallet_Code,string OrderForm)
        {
            lock (lockerEngineTypeGetOver_PLC_Work)
            {
                int IsAllowWork;
                int RepairPartStatusPLC = 0;
                int MES_QualityMask = 1;
                //string OrderForm = "";//订单号
                DataTable dt;

                if (EngineTypeID <= 0)
                {
                    AsyncSendMessage_Notice(OpName, "PLC传递机型为空");
                    return;
                }

                //第一步，查询订单号，保存机型、机型代码、总成号、托盘号、订单号到数据库
                BaseDataSystemMES.GetEngineID_Select(OpName, EngineID, out dt);
                if (dt != null && dt.Rows.Count > 0)
                {
                    OrderForm = Convert.ToString(dt.Rows[0]["订单号"]);
                }
                BaseDataSystemMES.OpName_MIS_MOBY_Insert(OpName, OrderForm, EngineTypeID, EngineType, EngineID, PartPallet_Code, 0, 0, "");
                SaveMobyMessage(OpName, EngineTypeID, EngineType, EngineID, OrderForm);

                //第二步，将零件信息转移到零件_临时表中（本地BOM与订单BOM的选择显示关系）
                BaseDataSystemMES.MesServer_Process_EngineTypeOver(OpName);

                //通知web显示
                Sendmessage("5123", "1111", OpName);
                MIS_BASE.Read_PalletInfo(OpName, out MES_QualityMask);//合格标志
                MIS_BASE.Read_RepairStatus_PLC(OpName, out RepairPartStatusPLC);//返修标志
                SendInfomation("QualityMask", Convert.ToString(MES_QualityMask), OpName);//显示合格标志
                SendInfomation("RepairPartStatusPLC", Convert.ToString(RepairPartStatusPLC), OpName);//显示返修标志

                if (MES_QualityMask == 2)
                {
                    //工作完成
                    MIS_BASE.Write_MaterialVerifyOver(OpName, true);
                    SendInfomation("NgGO", "1", OpName);//显示不合格标志
                    return;
                }


                //第三步，用于工件离开后完工数量统计及工件编号追溯
                BaseDataSystemMES.MaterialPush_EngineIDStatus_Insert(OpName);//更新订单产量

                //第四步，获取是否允许工作
                BaseDataSystemMES.MesServer_Judge_IsCanWork(OpName, out IsAllowWork);

                //暂时先定义为扫描完成才能进行压装工作，因为考虑到工作完成后，操作工未必会去扫描物料的情况
                if (IsAllowWork == 1)
                {
                    //通知PLC允许工作,允许工作在保存完成时清空
                    MIS_BASE.Write_FixAllow(OpName, true);
                }
                else
                {
                    AsyncSendMessage_Notice(OpName, "请扫描物料！");
                }
            }
  

        }

        /// <summary>
        /// 保存MOBY信息
        /// </summary>
        /// <param name="OpName"></param>
        /// <param name="engineTypeID"></param>
        /// <param name="engineType"></param>
        /// <param name="engineID"></param>
        static private void SaveMobyMessage(string OpName, int engineTypeID, string engineType, string engineID, string orderForm)
        {
            if (MIS_BASE.hashtable_EngineGetOver_EngineTypeID == null)
            {
                MIS_BASE.InitHashtable_MesServerCode();
            }
            if (MIS_BASE.hashtable_EngineGetOver_EngineTypeID.ContainsKey(OpName))
            {
                MIS_BASE.hashtable_EngineGetOver_EngineTypeID[OpName] = engineTypeID;
            }
            if (MIS_BASE.hashtable_EngineGetOver_EngineType.ContainsKey(OpName))
            {
                MIS_BASE.hashtable_EngineGetOver_EngineType[OpName] = engineType;
            }
            if (MIS_BASE.hashtable_EngineGetOver_EngineID.ContainsKey(OpName))
            {
                MIS_BASE.hashtable_EngineGetOver_EngineID[OpName] = engineID;
            }
            if (MIS_BASE.hashtable_EngineGetOver_OrderForm.ContainsKey(OpName))
            {
                MIS_BASE.hashtable_EngineGetOver_OrderForm[OpName] = orderForm;
            }
        }

        /// <summary>
        /// 返修件需要工作
        /// </summary>
        /// <param name="OpName">工位号</param>
        static private void IsNeedRepaire_OK(string OpName)
        {
            string orderForm = "";
            int engineTypeID;
            string engineType = "";
            string engineID = "";
            string palletCode = "";
            int isRepair;
            string repairCode = "";
            //从监控系统中查询出本工位信息
            BaseDataSystemMES.OpName_MIS_Moby_Select(OpName,
            out orderForm, out engineTypeID, out engineType,
            out engineID, out palletCode, out isRepair, out repairCode);

            EngineTypeGetOver_PLC_Work(OpName, engineTypeID, engineType, engineID, Convert.ToInt32(palletCode),orderForm);
        }



    }
}
