using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data;
using ICSharpCode.Core;
using Mesnac.Equips;
using Mesnac.Codd.Session;
using Mesnac.Controls.Base;
using Mesnac.Action.ChemicalWeighing.FinishBatch.SaveHelper;

namespace Mesnac.Action.ChemicalWeighing.FinishBatch
{
    /// <summary>
    /// 生产管理-后台业务-生产数据存盘业务服务类
    /// </summary>
    public class FinishBatchService
    {
        #region 字段定义

        /// <summary>
        /// 运行状态,true:已运行,false:未运行
        /// </summary>
        private bool runState = false;

        #endregion

        #region 单例实现

        private static FinishBatchService _instance = null;

        private FinishBatchService()
        {
            
        }

        public static FinishBatchService Instance
        {
            get
            {
                lock (String.Empty)
                {
                    if (_instance == null)
                    {
                        _instance = new FinishBatchService();
                    }
                    return _instance;
                }
            }
        }

        #endregion

        #region 启动服务

        public void Start()
        {
            try
            {
                if (this.runState)
                {
                    return;
                }
                lock (String.Empty)
                {
                    Mesnac.Equips.Factory.Instance.SetMinHZReadDataEvent(ReadData);
                    this.runState = true;
                }
            }
            catch(Exception ex)
            {
                ICSharpCode.Core.LoggingService<FinishBatchService>.Error("自动更新计划状态服务异常:" + ex.Message, ex);
            }
        }

        #endregion

        #region 停止服务

        public void Stop()
        {
            try
            {
                if (!this.runState)
                {
                    return;
                }
                lock (String.Empty)
                {
                    ICSharpCode.Core.LoggingService<FinishBatchService>.Debug("开始停止生产数据存盘服务...");
                    Mesnac.Equips.Factory.Instance.ClearMinHZReadDataEvent(ReadData);
                    ICSharpCode.Core.LoggingService<FinishBatchService>.Debug("停止生产数据存盘服务完毕!");
                    this.runState = false;
                }

            }
            catch (Exception ex)
            {
                ICSharpCode.Core.LoggingService<FinishBatchService>.Error("停止生产数据存盘业务服务异常:" + ex.Message, ex);
            }
        }

        #endregion

        #region 事件处理

        private void ReadData(object sender, Mesnac.Equips.ReadEventArgs e)
        {
            try
            {
                lock(String.Empty)
                {

                    #region 0、实时刷新自动保存报警

                    SaveHelper.AlarmSaveHelper.Instance.Save();

                    #endregion

                    #region 1、自动下传计划
                    ChemicalWeighingPlc.PlcPlanHelper.GHDownloadPlanData();
                    //List<string> msgList = new List<string>();
                    //ChemicalWeighingPlc.PlcPlanHelper.AutoDownloadPlanData(msgList);

                    #endregion

                    #region 2、将等待计划数写入PLC

                    //ChemicalWeighingPlc.PlcPlanHelper.WaitPlanNumToPLC();

                    #endregion

                    #region 3、更新计划状态

                    //ChemicalWeighingPlc.PlcPlanHelper.UpdatePlanStateFromPlc();

                    #endregion

                    #region 4、HMI配方列表请求处理

                    //ChemicalWeighingPlc.PlcRecipeHelper.DownloadRecipeNameListToPLC();

                    #endregion

                    #region 5、HMI计划添加请求处理

                    //ChemicalWeighingPlc.PlcPlanHelper.AutoAddPlan();

                    #endregion

                    #region 6、HMI计划修改请求处理

                    //ChemicalWeighingPlc.PlcPlanHelper.ChangePlan();

                    #endregion

                    #region 7、自动存盘处理

                    //FinishBatchHelper.SaveGHData();

                    //ReportDryMixerSaveHelper.Instance.Save();
                    ReportWetMixerSaveHelper.Instance.SaveWetMixerReport();
                    //ReportGelDoserSaveHelper.Instance.SaveGelDoserReport();
                    #endregion

                    #region 8、更新物料名称

                    //ChemicalWeighingPlc.PlcPlanHelper.UpdateMaterialNameToPlc();

                    #endregion

                    #region 9、修改PC心跳信号

                    //ChemicalWeighingPlc.PlcPlanHelper.HeartBeatChange();

                    #endregion

                    #region 10、自动换班

                    ChemicalWeighingPlc.PlcPlanHelper.shiftIDAutoChange();

                    #endregion
                }

            }
            catch(Exception ex)
            {
                ICSharpCode.Core.LoggingService<FinishBatchService>.Error(ex.Message, ex);
            }
            finally
            {
                #region 6、设置PCok信号为空闲

                //#region 保存存盘

                //BasePlcHelper.Instance.PlcWriteByDataKey(BasePlcHelper.Instance.ReportSave_MixWeight_PC_PCok, new object[] { 1 }, false);
                //BasePlcHelper.Instance.PlcWriteByDataKey(BasePlcHelper.Instance.ReportSave_Mix_PC_PCok, new object[] { 1 }, false);
                //BasePlcHelper.Instance.PlcWriteByDataKey(BasePlcHelper.Instance.ReportSave_MillWeight_PC_PCok, new object[] { 1 }, false);
                //BasePlcHelper.Instance.PlcWriteByDataKey(BasePlcHelper.Instance.ReportSave_Mill_PC_PCok, new object[] { 1 }, false);

                //#endregion

                //#region 配方交互

                //BasePlcHelper.Instance.PlcWriteByDataKey(BasePlcHelper.Instance.Mix_RecipeDL_PC_PCok, new object[] { 1 }, false);

                //#endregion

                #endregion
            }
        }

        #endregion
    }
}